home *** CD-ROM | disk | FTP | other *** search
/ Halting the Hacker - A P…uide to Computer Security / Halting the Hacker - A Practical Guide to Computer Security.iso / rfc / rfc1819.txt < prev    next >
Text File  |  1997-04-01  |  267KB  |  6,108 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                  ST2 Working Group
  8. Request for Comments: 1819           L. Delgrossi and L. Berger, Editors
  9. Obsoletes: 1190, IEN 119                                     August 1995
  10. Category: Experimental
  11.  
  12.  
  13.                 Internet Stream Protocol Version 2 (ST2)
  14.                  Protocol Specification - Version ST2+
  15.  
  16. Status of this Memo
  17.  
  18.    This memo defines an Experimental Protocol for the Internet
  19.    community.  This memo does not specify an Internet standard of any
  20.    kind.  Discussion and suggestions for improvement are requested.
  21.    Distribution of this memo is unlimited.
  22.  
  23. IESG NOTE
  24.  
  25.    This document is a revision of RFC1190. The charter of this effort
  26.    was clarifying, simplifying and removing errors from RFC1190 to
  27.    ensure interoperability of implementations.
  28.  
  29.    NOTE WELL: Neither the version of the protocol described in this
  30.    document nor the previous version is an Internet Standard or under
  31.    consideration for that status.
  32.  
  33.    Since the publication of the original version of the protocol, there
  34.    have been significant developments in the state of the art.  Readers
  35.    should note that standards and technology addressing alternative
  36.    approaches to the resource reservation problem are currently under
  37.    development within the IETF.
  38.  
  39. Abstract
  40.  
  41.    This memo contains a revised specification of the Internet STream
  42.    Protocol Version 2 (ST2). ST2 is an experimental resource reservation
  43.    protocol intended to provide end-to-end real-time guarantees over an
  44.    internet. It allows applications to build multi-destination simplex
  45.    data streams with a desired quality of service. The revised version
  46.    of ST2 specified in this memo is called ST2+.
  47.  
  48.    This specification is a product of the STream Protocol Working Group
  49.    of the Internet Engineering Task Force.
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. Delgrossi & Berger, Editors   Experimental                      [Page 1]
  59.  
  60. RFC 1819              ST2+ Protocol Specification            August 1995
  61.  
  62.  
  63. Table of Contents
  64.  
  65.      1  Introduction                                                   6
  66.              1.1  What is ST2?                                         6
  67.              1.2  ST2 and IP                                           8
  68.              1.3  Protocol History                                     8
  69.              1.3.1  RFC1190 ST and ST2+ Major Differences              9
  70.              1.4  Supporting Modules for ST2                          10
  71.              1.4.1  Data Transfer Protocol                            11
  72.              1.4.2  Setup Protocol                                    11
  73.              1.4.3  Flow Specification                                11
  74.              1.4.4  Routing Function                                  12
  75.              1.4.5  Local Resource Manager                            12
  76.              1.5  ST2 Basic Concepts                                  15
  77.              1.5.1  Streams                                           16
  78.              1.5.2  Data Transmission                                 16
  79.              1.5.3  Flow Specification                                17
  80.              1.6  Outline of This Document                            19
  81.  
  82.      2  ST2 User Service Description                                  19
  83.              2.1  Stream Operations and Primitive Functions           19
  84.              2.2  State Diagrams                                      21
  85.              2.3  State Transition Tables                             25
  86.  
  87.      3  The ST2 Data Transfer Protocol                                26
  88.              3.1  Data Transfer with ST                               26
  89.              3.2  ST Protocol Functions                               27
  90.              3.2.1  Stream Identification                             27
  91.              3.2.2  Packet Discarding based on Data Priority          27
  92.  
  93.      4  SCMP Functional Description                                   28
  94.              4.1  Types of Streams                                    29
  95.              4.1.1  Stream Building                                   30
  96.              4.1.2  Knowledge of Receivers                            30
  97.              4.2  Control PDUs                                        31
  98.              4.3  SCMP Reliability                                    32
  99.              4.4  Stream Options                                      33
  100.              4.4.1  No Recovery                                       33
  101.              4.4.2  Join Authorization Level                          34
  102.              4.4.3  Record Route                                      34
  103.              4.4.4  User Data                                         35
  104.              4.5  Stream Setup                                        35
  105.              4.5.1  Information from the Application                  35
  106.              4.5.2  Initial Setup at the Origin                       35
  107.              4.5.2.1  Invoking the Routing Function                   36
  108.              4.5.2.2  Reserving Resources                             36
  109.              4.5.3  Sending CONNECT Messages                          37
  110.              4.5.3.1  Empty Target List                               37
  111.  
  112.  
  113.  
  114. Delgrossi & Berger, Editors   Experimental                      [Page 2]
  115.  
  116. RFC 1819              ST2+ Protocol Specification            August 1995
  117.  
  118.  
  119.              4.5.4  CONNECT Processing by an Intermediate ST agent    37
  120.              4.5.5  CONNECT Processing at the Targets                 38
  121.              4.5.6  ACCEPT Processing by an Intermediate ST agent     38
  122.              4.5.7  ACCEPT Processing by the Origin                   39
  123.              4.5.8  REFUSE Processing by the Intermediate ST agent    39
  124.              4.5.9  REFUSE Processing by the Origin                   39
  125.              4.5.10  Other Functions during Stream Setup              40
  126.              4.6  Modifying an Existing Stream                        40
  127.              4.6.1  The Origin Adding New Targets                     41
  128.              4.6.2  The Origin Removing a Target                      41
  129.              4.6.3  A Target Joining a Stream                         42
  130.              4.6.3.1  Intermediate Agent (Router) as Origin           43
  131.              4.6.4  A Target Deleting Itself                          43
  132.              4.6.5  Changing a Stream's FlowSpec                      44
  133.              4.7  Stream Tear Down                                    45
  134.  
  135.      5  Exceptional Cases                                             45
  136.              5.1  Long ST Messages                                    45
  137.              5.1.1  Handling of Long Data Packets                     45
  138.              5.1.2  Handling of Long Control Packets                  46
  139.              5.2  Timeout Failures                                    47
  140.              5.2.1  Failure due to ACCEPT Acknowledgment Timeout      47
  141.              5.2.2  Failure due to CHANGE Acknowledgment Timeout      47
  142.              5.2.3  Failure due to CHANGE Response Timeout            48
  143.              5.2.4  Failure due to CONNECT Acknowledgment Timeout     48
  144.              5.2.5  Failure due to CONNECT Response Timeout           48
  145.              5.2.6  Failure due to DISCONNECT Acknowledgment Timeout  48
  146.              5.2.7  Failure due to JOIN Acknowledgment Timeout        48
  147.              5.2.8  Failure due to JOIN Response Timeout              49
  148.              5.2.9  Failure due to JOIN-REJECT Acknowledgment Timeout 49
  149.              5.2.10  Failure due to NOTIFY Acknowledgment Timeout     49
  150.              5.2.11  Failure due to REFUSE Acknowledgment Timeout     49
  151.              5.2.12  Failure due to STATUS Response Timeout           49
  152.              5.3  Setup Failures due to Routing Failures              50
  153.              5.3.1  Path Convergence                                  50
  154.              5.3.2  Other Cases                                       51
  155.              5.4  Problems due to Routing Inconsistency               52
  156.              5.5  Problems in Reserving Resources                     53
  157.              5.5.1  Mismatched FlowSpecs                              53
  158.              5.5.2  Unknown FlowSpec Version                          53
  159.              5.5.3  LRM Unable to Process FlowSpec                    53
  160.              5.5.4  Insufficient Resources                            53
  161.              5.6  Problems Caused by CHANGE Messages                  54
  162.              5.7  Unknown Targets in DISCONNECT and CHANGE            55
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170. Delgrossi & Berger, Editors   Experimental                      [Page 3]
  171.  
  172. RFC 1819              ST2+ Protocol Specification            August 1995
  173.  
  174.  
  175.      6  Failure Detection and Recovery                                55
  176.              6.1  Failure Detection                                   55
  177.              6.1.1  Network Failures                                  56
  178.              6.1.2  Detecting ST Agents Failures                      56
  179.              6.2  Failure Recovery                                    58
  180.              6.2.1  Problems in Stream Recovery                       60
  181.              6.3  Stream Preemption                                   62
  182.  
  183.      7  A Group of Streams                                            63
  184.              7.1  Basic Group Relationships                           63
  185.              7.1.1  Bandwidth Sharing                                 63
  186.              7.1.2  Fate Sharing                                      64
  187.              7.1.3  Route Sharing                                     65
  188.              7.1.4  Subnet Resources Sharing                          65
  189.              7.2  Relationships Orthogonality                         65
  190.  
  191.      8  Ancillary Functions                                           66
  192.              8.1  Stream ID Generation                                66
  193.              8.2  Group Name Generator                                66
  194.              8.3  Checksum Computation                                67
  195.              8.4  Neighbor ST Agent Identification and
  196.                      Information Collection                           67
  197.              8.5  Round Trip Time Estimation                          68
  198.              8.6  Network MTU Discovery                               68
  199.              8.7  IP Encapsulation of ST                              69
  200.              8.8  IP Multicasting                                     70
  201.  
  202.      9  The ST2+ Flow Specification                                   71
  203.              9.1  FlowSpec Version #0 - (Null FlowSpec)               72
  204.              9.2  FlowSpec Version #7 - ST2+ FlowSpec                 72
  205.              9.2.1  QoS Classes                                       73
  206.              9.2.2  Precedence                                        74
  207.              9.2.3  Maximum Data Size                                 74
  208.              9.2.4  Message Rate                                      74
  209.              9.2.5  Delay and Delay Jitter                            74
  210.              9.2.6  ST2+ FlowSpec Format                              75
  211.  
  212.      10  ST2 Protocol Data Units Specification                        77
  213.              10.1  Data PDU                                           77
  214.              10.1.1  ST Data Packets                                  78
  215.              10.2  Control PDUs                                       78
  216.              10.3  Common SCMP Elements                               80
  217.              10.3.1  FlowSpec                                         80
  218.              10.3.2  Group                                            81
  219.              10.3.3  MulticastAddress                                 82
  220.              10.3.4  Origin                                           82
  221.              10.3.5  RecordRoute                                      83
  222.              10.3.6  Target and TargetList                            84
  223.  
  224.  
  225.  
  226. Delgrossi & Berger, Editors   Experimental                      [Page 4]
  227.  
  228. RFC 1819              ST2+ Protocol Specification            August 1995
  229.  
  230.  
  231.              10.3.7  UserData                                         85
  232.              10.3.8  Handling of Undefined Parameters                 86
  233.              10.4  ST Control Message PDUs                            86
  234.              10.4.1  ACCEPT                                           86
  235.              10.4.2  ACK                                              88
  236.              10.4.3  CHANGE                                           89
  237.              10.4.4  CONNECT                                          89
  238.              10.4.5  DISCONNECT                                       92
  239.              10.4.6  ERROR                                            93
  240.              10.4.7  HELLO                                            94
  241.              10.4.8  JOIN                                             95
  242.              10.4.9  JOIN-REJECT                                      96
  243.              10.4.10  NOTIFY                                          97
  244.              10.4.11  REFUSE                                          98
  245.              10.4.12  STATUS                                         100
  246.              10.4.13  STATUS-RESPONSE                                100
  247.              10.5  Suggested Protocol Constants                      101
  248.              10.5.1  SCMP Messages                                   102
  249.              10.5.2  SCMP Parameters                                 102
  250.              10.5.3  ReasonCode                                      102
  251.              10.5.4  Timeouts and Other Constants                    104
  252.              10.6  Data Notations                                    105
  253.      11  References                                                  106
  254.      12  Security Considerations                                     108
  255.      13  Acknowledgments and Authors' Addresses                      108
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282. Delgrossi & Berger, Editors   Experimental                      [Page 5]
  283.  
  284. RFC 1819              ST2+ Protocol Specification            August 1995
  285.  
  286.  
  287. 1.  Introduction
  288.  
  289. 1.1  What is ST2?
  290.  
  291.    The Internet Stream Protocol, Version 2 (ST2) is an experimental
  292.    connection-oriented internetworking protocol that operates at the
  293.    same layer as connectionless IP. It has been developed to support the
  294.    efficient delivery of data streams to single or multiple destinations
  295.    in applications that require guaranteed quality of service. ST2 is
  296.    part of the IP protocol family and serves as an adjunct to, not a
  297.    replacement for, IP. The main application areas of the protocol are
  298.    the real-time transport of multimedia data, e.g., digital audio and
  299.    video packet streams, and distributed simulation/gaming, across
  300.    internets.
  301.  
  302.    ST2 can be used to reserve bandwidth for real-time streams across
  303.    network routes. This reservation, together with appropriate network
  304.    access and packet scheduling mechanisms in all nodes running the
  305.    protocol, guarantees a well-defined Quality of Service (QoS) to ST2
  306.    applications. It ensures that real-time packets are delivered within
  307.    their deadlines, that is, at the time where they need to be
  308.    presented.  This facilitates a smooth delivery of data that is
  309.    essential for time- critical applications, but can typically not be
  310.    provided by best- effort IP communication.
  311.  
  312.                       DATA PATH                         CONTROL PATH
  313.                       =========                         ============
  314.        Upper     +------------------+                     +---------+
  315.        Layer     | Application data |                     | Control |
  316.                  +------------------+                     +---------+
  317.                           |                                    |
  318.                           |                                    V
  319.                           |                     +-------------------+
  320.        SCMP               |                     |   SCMP  |         |
  321.                           |                     +-------------------+
  322.                           |                             |
  323.                           V                             V
  324.             +-----------------------+      +------------------------+
  325.        ST   | ST |                  |      | ST |         |         |
  326.             +-----------------------+      +------------------------+
  327.             D-bit=1                       D-bit=0
  328.  
  329.                    Figure 1: ST2 Data and Control Path
  330.  
  331.    Just like IP, ST2 actually consists of two protocols: ST for the data
  332.    transport and SCMP, the Stream Control Message Protocol, for all
  333.    control functions. ST is simple and contains only a single PDU format
  334.    that is designed for fast and efficient data forwarding in order to
  335.  
  336.  
  337.  
  338. Delgrossi & Berger, Editors   Experimental                      [Page 6]
  339.  
  340. RFC 1819              ST2+ Protocol Specification            August 1995
  341.  
  342.  
  343.    achieve low communication delays. SCMP, however, is more complex than
  344.    IP's ICMP. As with ICMP and IP, SCMP packets are transferred within
  345.    ST packets as shown in Figure 1.
  346.  
  347.     +--------------------+
  348.     | Conference Control |
  349.     +--------------------+
  350.    +-------+ +-------+ |
  351.    | Video | | Voice | | +-----+ +------+ +-----+     +-----+ Application
  352.    | Appl  | | Appl  | | | SNMP| |Telnet| | FTP | ... |     |    Layer
  353.    +-------+ +-------+ | +-----+ +------+ +-----+     +-----+
  354.        |        |      |     |        |     |            |
  355.        V        V      |     |        |     |            |   ------------
  356.     +-----+  +-----+   |     |        |     |            |
  357.     | PVP |  | NVP |   |     |        |     |            |
  358.     +-----+  +-----+   +     |        |     |            |
  359.      |   \      | \     \    |        |     |            |
  360.      |    +-----|--+-----+   |        |     |            |
  361.      |     Appl.|control  V  V        V     V            V
  362.      | ST  data |         +-----+    +-------+        +-----+
  363.      | & control|         | UDP |    |  TCP  |    ... | RTP | Transport
  364.      |          |         +-----+    +-------+        +-----+   Layer
  365.      |         /|          / | \       / / |          / /|
  366.      |\       / |  +------+--|--\-----+-/--|--- ... -+ / |
  367.      | \     /  |  |         |   \     /   |          /  |
  368.      |  \   /   |  |         |    \   +----|--- ... -+   |   -----------
  369.      |   \ /    |  |         |     \ /     |             |
  370.      |    V     |  |         |      V      |             |
  371.      | +------+ |  |         |   +------+  |   +------+  |
  372.      | | SCMP | |  |         |   | ICMP |  |   | IGMP |  |    Internet
  373.      | +------+ |  |         |   +------+  |   +------+  |     Layer
  374.      |    |     |  |         |      |      |      |      |
  375.      V    V     V  V         V      V      V      V      V
  376.    +-----------------+  +-----------------------------------+
  377.    | STream protocol |->|      Internet     Protocol        |
  378.    +-----------------+  +-----------------------------------+
  379.                   | \   / |
  380.                   |  \ /  |
  381.                   |   X   |                                  ------------
  382.                   |  / \  |
  383.                   | /   \ |
  384.                   VV     VV
  385.    +----------------+   +----------------+
  386.    | (Sub-) Network |...| (Sub-) Network |                  (Sub-)Network
  387.    |    Protocol    |   |    Protocol    |                     Layer
  388.    +----------------+   +----------------+
  389.  
  390.                    Figure 2.  Protocol Relationships
  391.  
  392.  
  393.  
  394. Delgrossi & Berger, Editors   Experimental                      [Page 7]
  395.  
  396. RFC 1819              ST2+ Protocol Specification            August 1995
  397.  
  398.  
  399. 1.2  ST2 and IP
  400.  
  401.    ST2 is designed to coexist with IP on each node. A typical
  402.    distributed multimedia application would use both protocols: IP for
  403.    the transfer of traditional data and control information, and ST2 for
  404.    the transfer of real-time data. Whereas IP typically will be accessed
  405.    from TCP or UDP, ST2 will be accessed via new end-to-end real-time
  406.    protocols. The position of ST2 with respect to the other protocols of
  407.    the Internet family is represented in Figure 2.
  408.  
  409.    Both ST2 and IP apply the same addressing schemes to identify
  410.    different hosts. ST2 and IP packets differ in the first four bits,
  411.    which contain the internetwork protocol version number: number 5 is
  412.    reserved for ST2 (IP itself has version number 4). As a network layer
  413.    protocol, like IP, ST2 operates independently of its underlying
  414.    subnets. Existing implementations use ARP for address resolution, and
  415.    use the same Layer 2 SAPs as IP.
  416.  
  417.    As a special function, ST2 messages can be encapsulated in IP
  418.    packets.  This is represented in Figure 2 as a link between ST2 and
  419.    IP. This link allows ST2 messages to pass through routers which do
  420.    not run ST2.  Resource management is typically not available for
  421.    these IP route segments. IP encapsulation is, therefore, suggested
  422.    only for portions of the network which do not constitute a system
  423.    bottleneck.
  424.  
  425.    In Figure 2, the RTP protocol is shown as an example of transport
  426.    layer on top of ST2. Others include the Packet Video Protocol (PVP)
  427.    [Cole81], the Network Voice Protocol (NVP) [Cohe81], and others such
  428.    as the Heidelberg Transport Protocol (HeiTP) [DHHS92].
  429.  
  430. 1.3  Protocol History
  431.  
  432.    The first version of ST was published in the late 1970's and was used
  433.    throughout the 1980's for experimental transmission of voice, video,
  434.    and distributed simulation. The experience gained in these
  435.    applications led to the development of the revised protocol version
  436.    ST2. The revision extends the original protocol to make it more
  437.    complete and more applicable to emerging multimedia environments. The
  438.    specification of this protocol version is contained in Internet RFC
  439.    1190 which was published in October 1990 [RFC1190].
  440.  
  441.    With more and more developments of commercial distributed multimedia
  442.    applications underway and with a growing dissatisfaction at the
  443.    transmission quality for audio and video over IP in the MBONE,
  444.    interest in ST2 has grown over the last years. Companies have
  445.    products available incorporating the protocol. The BERKOM MMTS
  446.    project of the German PTT [DeAl92] uses ST2 as its core protocol for
  447.  
  448.  
  449.  
  450. Delgrossi & Berger, Editors   Experimental                      [Page 8]
  451.  
  452. RFC 1819              ST2+ Protocol Specification            August 1995
  453.  
  454.  
  455.    the provision of multimedia teleservices such as conferencing and
  456.    mailing. In addition, implementations of ST2 for Digital Equipment,
  457.    IBM, NeXT, Macintosh, PC, Silicon Graphics, and Sun platforms are
  458.    available.
  459.  
  460.    In 1993, the IETF started a new working group on ST2 as part of
  461.    ongoing efforts to develop protocols that address resource
  462.    reservation issues.  The group's mission was to clean up the existing
  463.    protocol specification to ensure better interoperability between the
  464.    existing and emerging implementations. It was also the goal to
  465.    produce an updated experimental protocol specification that reflected
  466.    the experiences gained with the existing ST2 implementations and
  467.    applications. Which led to the specification of the ST2+ protocol
  468.    contained in this document.
  469.  
  470. 1.3.1  RFC1190 ST and ST2+ Major Differences
  471.  
  472.    The protocol changes from RFC1190 were motivated by protocol
  473.    simplification and clarification, and codification of extensions in
  474.    existing implementations. This section provides a list of major
  475.    differences, and is probably of interest only to those who have
  476.    knowledge of RFC1190. The major differences between the versions are:
  477.  
  478. o   Elimination of "Hop IDentifiers" or HIDs. HIDs added much complexity
  479.     to the protocol and was found to be a major impediment to
  480.     interoperability. HIDs have been replaced by globally unique
  481.     identifiers called "Stream IDentifiers" or SIDs.
  482.  
  483. o   Elimination of a number of stream options. A number of options were
  484.     found to not be used by any implementation, or were thought to add
  485.     more complexity than value. These options were removed. Removed
  486.     options include: point-to-point, full-duplex, reverse charge, and
  487.     source route.
  488.  
  489. o   Elimination of the concept of "subset" implementations. RFC1190
  490.     permitted subset implementations, to allow for easy implementation
  491.     and experimentation. This led to interoperability problems. Agents
  492.     implementing the protocol specified in this document, MUST implement
  493.     the full protocol. A number of the protocol functions are best-
  494.     effort. It is expected that some implementations will make more
  495.     effort than others in satisfying particular protocol requests.
  496.  
  497. o   Clarification of the capability of targets to request to join a
  498.     steam. RFC1190 can be interpreted to support target requests, but
  499.     most implementors did not understand this and did not add support
  500.     for this capability. The lack of this capability was found to be a
  501.     significant limitation in the ability to scale the number of
  502.     participants in a single ST stream. This clarification is based on
  503.  
  504.  
  505.  
  506. Delgrossi & Berger, Editors   Experimental                      [Page 9]
  507.  
  508. RFC 1819              ST2+ Protocol Specification            August 1995
  509.  
  510.  
  511.     work done by IBM Heidelberg.
  512.  
  513. o   Separation of functions between ST and supporting modules. An effort
  514.     was made to improve the separation of functions provided by ST and
  515.     those provided by other modules. This is reflected in reorganization
  516.     of some text and some PDU formats. ST was also made FlowSpec
  517.     independent, although it does define a FlowSpec for testing and
  518.     interoperability purposes.
  519.  
  520. o   General reorganization and re-write of the specification. This
  521.     document has been organized with the goal of improved readability
  522.     and clarity. Some sections have been added, and an effort was made
  523.     to improve the introduction of concepts.
  524.  
  525. 1.4  Supporting Modules for ST2
  526.  
  527.    ST2 is one piece of a larger mosaic. This section presents the
  528.    overall communication architecture and clarifies the role of ST2 with
  529.    respect to its supporting modules.
  530.  
  531.    ST2 proposes a two-step communication model. In the first step, the
  532.    real-time channels for the subsequent data transfer are built. This
  533.    is called stream setup. It includes selecting the routes to the
  534.    destinations and reserving the correspondent resources. In the second
  535.    step, the data is transmitted over the previously established
  536.    streams.  This is called data transfer. While stream setup does not
  537.    have to be completed in real-time, data transfer has stringent real-
  538.    time requirements. The architecture used to describe the ST2
  539.    communication model includes:
  540.  
  541. o   a data transfer protocol for the transmission of real-time data
  542.     over the established streams,
  543.  
  544. o   a setup protocol to establish real-time streams based on the flow
  545.     specification,
  546.  
  547. o   a flow specification to express user real-time requirements,
  548.  
  549. o   a routing function to select routes in the Internet,
  550.  
  551. o   a local resource manager to appropriately handle resources involved
  552.     in the communication.
  553.  
  554.    This document defines a data protocol (ST), a setup protocol (SCMP),
  555.    and a flow specification (ST2+ FlowSpec). It does not define a
  556.    routing function and a local resource manager. However, ST2 assumes
  557.    their existence.
  558.  
  559.  
  560.  
  561.  
  562. Delgrossi & Berger, Editors   Experimental                     [Page 10]
  563.  
  564. RFC 1819              ST2+ Protocol Specification            August 1995
  565.  
  566.  
  567.    Alternative architectures are possible, see [RFC1633] for an example
  568.    alternative architecture that could be used when implementing ST2.
  569.  
  570. 1.4.1  Data Transfer Protocol
  571.  
  572.    The data transfer protocol defines the format of the data packets
  573.    belonging to the stream. Data packets are delivered to the targets
  574.    along the stream paths previously established by the setup protocol.
  575.    Data packets are delivered with the quality of service associated
  576.    with the stream.
  577.  
  578.    Data packets contain a globally unique stream identifier that
  579.    indicates which stream they belong to. The stream identifier is also
  580.    known by the setup protocol, which uses it during stream
  581.    establishment. The data transfer protocol for ST2, known simply as
  582.    ST, is completely defined by this document.
  583.  
  584. 1.4.2  Setup Protocol
  585.  
  586.    The setup protocol is responsible for establishing, maintaining, and
  587.    releasing real-time streams. It relies on the routing function to
  588.    select the paths from the source to the destinations. At each
  589.    host/router on these paths, it presents the flow specification
  590.    associated with the stream to the local resource manager. This causes
  591.    the resource managers to reserve appropriate resources for the
  592.    stream.  The setup protocol for ST2 is called Stream Control Message
  593.    Protocol, or SCMP, and is completely defined by this document.
  594.  
  595. 1.4.3  Flow Specification
  596.  
  597.    The flow specification is a data structure including the ST2
  598.    applications' QoS requirements. At each host/router, it is used by
  599.    the local resource manager to appropriately handle resources so that
  600.    such requirements are met. Distributing the flow specification to all
  601.    resource managers along the communication paths is the task of the
  602.    setup protocol. However, the contents of the flow specification are
  603.    transparent to the setup protocol, which simply carries the flow
  604.    specification. Any operations on the flow specification, including
  605.    updating internal fields and comparing flow specifications are
  606.    performed by the resource managers.
  607.  
  608.    This document defines a specific flow specification format that
  609.    allows for interoperability among ST2 implementations. This flow
  610.    specification is intended to support a flow with a single
  611.    transmission rate for all destinations in the stream. Implementations
  612.    may support more than one flow specification format and the means are
  613.    provided to add new formats as they are defined in the future.
  614.    However, the flow specification format has to be consistent
  615.  
  616.  
  617.  
  618. Delgrossi & Berger, Editors   Experimental                     [Page 11]
  619.  
  620. RFC 1819              ST2+ Protocol Specification            August 1995
  621.  
  622.  
  623.    throughout the stream, i.e., it is not possible to use different flow
  624.    specification formats for different parts of the same stream.
  625.  
  626. 1.4.4  Routing Function
  627.  
  628.    The routing function is an external unicast route generation
  629.    capability. It provides the setup protocol with the path to reach
  630.    each of the desired destinations. The routing function is called on a
  631.    hop-by-hop basis and provides next-hop information. Once a route is
  632.    selected by the routing function, it persists for the whole stream
  633.    lifetime. The routing function may try to optimize based on the
  634.    number of targets, the requested resources, or use of local network
  635.    multicast or bandwidth capabilities. Alternatively, the routing
  636.    function may even be based on simple connectivity information.
  637.  
  638.    The setup protocol is not necessarily aware of the criteria used by
  639.    the routing function to select routes. It works with any routing
  640.    function algorithm. The algorithm adopted is a local matter at each
  641.    host/router and different hosts/routers may use different algorithms.
  642.    The interface between setup protocol and routing function is also a
  643.    local matter and therefore it is not specified by this document.
  644.  
  645.    This version of ST does not support source routing. It does support
  646.    route recording. It does include provisions that allow identification
  647.    of ST capable neighbors. Identification of remote ST hosts/routers is
  648.    not specifically addressed.
  649.  
  650. 1.4.5  Local Resource Manager
  651.  
  652.    At each host/router traversed by a stream, the Local Resource Manager
  653.    (LRM) is responsible for handling local resources. The LRM knows
  654.    which resources are on the system and what capacity they can provide.
  655.    Resources include:
  656.  
  657. o   CPUs on end systems and routers to execute the application and
  658.     protocol software,
  659.  
  660. o   main memory space for this software (as in all real-time systems,
  661.     code should be pinned in main memory, as swapping it out would have
  662.     detrimental effects on system performance),
  663.  
  664. o   buffer space to store the data, e.g., communication packets, passing
  665.     through the nodes,
  666.  
  667. o   network adapters, and
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674. Delgrossi & Berger, Editors   Experimental                     [Page 12]
  675.  
  676. RFC 1819              ST2+ Protocol Specification            August 1995
  677.  
  678.  
  679. o   transmission networks between the nodes. Networks may be as simple
  680.     as point-to-point links or as complex as switched networks such as
  681.     Frame Relay and ATM networks.
  682.  
  683.    During stream setup and modification, the LRM is presented by the
  684.    setup protocol with the flow specification associated to the stream.
  685.    For each resource it handles, the LRM is expected to perform the
  686.    following functions:
  687.  
  688. o   Stream Admission Control: it checks whether, given the flow
  689.     specification, there are sufficient resources left to handle the new
  690.     data stream. If the available resources are insufficient, the new
  691.     data stream must be rejected.
  692.  
  693. o   QoS Computation: it calculates the best possible performance the
  694.     resource can provide for the new data stream under the current
  695.     traffic conditions, e.g., throughput and delay values are computed.
  696.  
  697. o   Resource Reservation: it reserves the resource capacities required
  698.     to meet the desired QoS.
  699.  
  700.    During data transfer, the LRM is responsible for:
  701.  
  702. o   QoS Enforcement: it enforces the QoS requirements by appropriate
  703.     scheduling of resource access. For example, data packets from an
  704.     application with a short guaranteed delay must be served prior to
  705.     data from an application with a less strict delay bound.
  706.  
  707.    The LRM may also provide the following additional functions:
  708.  
  709. o   Data Regulation: to smooth a stream's data traffic, e.g., as with the
  710.     leaky bucket algorithm.
  711.  
  712. o   Policing: to prevent applications exceed their negotiated QoS, e.g.,
  713.     to send data at a higher rate than indicated in the flow
  714.     specification.
  715.  
  716. o   Stream Preemption: to free up resources for other streams with
  717.     higher priority or importance.
  718.  
  719.    The strategies adopted by the LRMs to handle resources are resource-
  720.    dependent and may vary at every host/router. However, it is necessary
  721.    that all LRMs have the same understanding of the flow specification.
  722.    The interface between setup protocol and LRM is a local matter at
  723.    every host and therefore it is not specified by this document. An
  724.    example of LRM is the Heidelberg Resource Administration Technique
  725.    (HeiRAT) [VoHN93].
  726.  
  727.  
  728.  
  729.  
  730. Delgrossi & Berger, Editors   Experimental                     [Page 13]
  731.  
  732. RFC 1819              ST2+ Protocol Specification            August 1995
  733.  
  734.  
  735.    It is also assumed that the LRM provides functions to compare flow
  736.    specifications, i.e., to decide whether a flow specification requires
  737.    a greater, equal, or smaller amount of resource capacities to be
  738.    reserved.
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786. Delgrossi & Berger, Editors   Experimental                     [Page 14]
  787.  
  788. RFC 1819              ST2+ Protocol Specification            August 1995
  789.  
  790.  
  791. 1.5  ST2 Basic Concepts
  792.  
  793.    The following sections present at an introductory level some of the
  794.    fundamental ST2 concepts including streams, data transfer, and flow
  795.    specification.
  796.  
  797.             Hosts Connections...                :      ...and Streams
  798.             ====================                :      ==============
  799.         data       Origin                       :          Origin
  800.        packets +-----------+                    :          +----+
  801.           +----|Application|                    :          |    |
  802.           |    |-----------|                    :          +----+
  803.           +--->| ST Agent  |                    :           |  |
  804.                +-----------+                    :           |  |
  805.                      |                          :           |  |
  806.                      V                          :           |  |
  807.               +-------------+                   :           |  |
  808.               |             |                   :           |  |
  809. +-------------|  Network A  |                   :   +-------+  +--+
  810. |             |             |                   :   |             |
  811. |             +-------------+                   :   |     Target 2|
  812. |                    |     Target 2             :   |     & Router|
  813. |     Target 1       |    and Router            :   |             |
  814. |  +-----------+     |  +-----------+           :   V             V
  815. |  |Application|<-+  |  |Application|<-+        : +----+        +----+
  816. |  |-----------|  |  |  |-----------|  |        : |    |        |    |
  817. +->| ST Agent  |--+  +->| ST Agent  |--+        : +----+        +----+
  818.    +-----------+        +-----------+           :Target 1         |  |
  819.                               |                 :                 |  |
  820.                               V                 :                 |  |
  821.                     +-------------+             :                 |  |
  822.                     |             |             :                 |  |
  823.       +-------------|  Network B  |             :           +-----+  |
  824.       |             |             |             :           |        |
  825.       |             +-------------+             :           |        |
  826.       |    Target 3        |    Target 4        :           |        |
  827.       |  +-----------+     |  +-----------+     :           V        V
  828.       |  |Application|<-+  |  |Application|<-+  :         +----+ +----+
  829.       |  |-----------|  |  |  |-----------|  |  :         |    | |    |
  830.       +->| ST Agent  |--+  +->| ST Agent  |--+  :         +----+ +----+
  831.          +-----------+        +-----------+     :      Target 3 Target 4
  832.                                                 :
  833.  
  834.                          Figure 3: The Stream Concept
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842. Delgrossi & Berger, Editors   Experimental                     [Page 15]
  843.  
  844. RFC 1819              ST2+ Protocol Specification            August 1995
  845.  
  846.  
  847. 1.5.1  Streams
  848.  
  849.    Streams form the core concepts of ST2. They are established between a
  850.    sending origin and one or more receiving targets in the form of a
  851.    routing tree. Streams are uni-directional from the origin to the
  852.    targets. Nodes in the tree represent so-called ST agents, entities
  853.    executing the ST2 protocol; links in the tree are called hops. Any
  854.    node in the middle of the tree is called an intermediate agent, or
  855.    router. An agent may have any combination of origin, target, or
  856.    intermediate capabilities.
  857.  
  858.    Figure 3 illustrates a stream from an origin to four targets, where
  859.    the ST agent on Target 2 also functions as an intermediate agent. Let
  860.    us use this Target 2/Router node to explain some basic ST2
  861.    terminology: the direction of the stream from this node to Target 3
  862.    and 4 is called downstream, the direction towards the Origin node
  863.    upstream. ST agents that are one hop away from a given node are
  864.    called previous-hops in the upstream, and next-hops in the downstream
  865.    direction.
  866.  
  867.    Streams are maintained using SCMP messages. Typical SCMP messages are
  868.    CONNECT and ACCEPT to build a stream, DISCONNECT and REFUSE to close
  869.    a stream, CHANGE to modify the quality of service associated with a
  870.    stream, and JOIN to request to be added to a stream.
  871.  
  872.    Each ST agent maintains state information describing the streams
  873.    flowing through it. It can actively gather and distribute such
  874.    information. It can recognize failed neighbor ST agents through the
  875.    use of periodic HELLO message exchanges. It can ask other ST agents
  876.    about a particular stream via a STATUS message. These ST agents then
  877.    send back a STATUS-RESPONSE message. NOTIFY messages can be used to
  878.    inform other ST agents of significant events.
  879.  
  880.    ST2 offers a wealth of functionalities for stream management. Streams
  881.    can be grouped together to minimize allocated resources or to process
  882.    them in the same way in case of failures. During audio conferences,
  883.    for example, only a limited set of participants may talk at once.
  884.    Using the group mechanism, resources for only a portion of the audio
  885.    streams of the group need to be reserved. Using the same concept, an
  886.    entire group of related audio and video streams can be dropped if one
  887.    of them is preempted.
  888.  
  889. 1.5.2  Data Transmission
  890.  
  891.    Data transfer in ST2 is simplex in the downstream direction. Data
  892.    transport through streams is very simple. ST2 puts only a small
  893.    header in front of the user data. The header contains a protocol
  894.    identification that distinguishes ST2 from IP packets, an ST2 version
  895.  
  896.  
  897.  
  898. Delgrossi & Berger, Editors   Experimental                     [Page 16]
  899.  
  900. RFC 1819              ST2+ Protocol Specification            August 1995
  901.  
  902.  
  903.    number, a priority field (specifying a relative importance of streams
  904.    in cases of conflict), a length counter, a stream identification, and
  905.    a checksum. These elements form a 12-byte header.
  906.  
  907.    Efficiency is also achieved by avoiding fragmentation and reassembly
  908.    on all agents. Stream establishment yields a maximum message size for
  909.    data packets on a stream. This maximum message size is communicated
  910.    to the upper layers, so that they provide data packets of suitable
  911.    size to ST2.
  912.  
  913.    Communication with multiple next-hops can be made even more efficient
  914.    using MAC Layer multicast when it is available. If a subnet supports
  915.    multicast, a single multicast packet is sufficient to reach all
  916.    next-hops connected to this subnet. This leads to a significant
  917.    reduction of the bandwidth requirements of a stream. If multicast is
  918.    not provided, separate packets need to be sent to each next-hop.
  919.  
  920.    As ST2 relies on reservation, it does not contain error correction
  921.    mechanisms features for data exchange such as those found in TCP. It
  922.    is assumed that real-time data, such as digital audio and video,
  923.    require partially correct delivery only. In many cases, retransmitted
  924.    packets would arrive too late to meet their real-time delivery
  925.    requirements. Also, depending on the data encoding and the particular
  926.    application, a small number of errors in stream data are acceptable.
  927.    In any case, reliability can be provided by layers on top of ST2 when
  928.    needed.
  929.  
  930. 1.5.3  Flow Specification
  931.  
  932.    As part of establishing a connection, SCMP handles the negotiation of
  933.    quality-of-service parameters for a stream. In ST2 terminology, these
  934.    parameters form a flow specification (FlowSpec) which is associated
  935.    with the stream. Different versions of FlowSpecs exist, see
  936.    [RFC1190], [DHHS92] and [RFC1363], and can be distinguished by a
  937.    version number.  Typically, they contain parameters such as average
  938.    and maximum throughput, end-to-end delay, and delay variance of a
  939.    stream. SCMP itself only provides the mechanism for relaying the
  940.    quality-of-service parameters.
  941.  
  942.    Three kinds of entities participate in the quality-of-service
  943.    negotiation: application entities on the origin and target sites as
  944.    the service users, ST agents, and local resource managers (LRM). The
  945.    origin application supplies the initial FlowSpec requesting a
  946.    particular service quality. Each ST agent which obtains the FlowSpec
  947.    as part of a connection establishment message, it presents the local
  948.    resource manager with it. ST2 does not determine how resource
  949.    managers make reservations and how resources are scheduled according
  950.    to these reservations; ST2, however, assumes these mechanisms as its
  951.  
  952.  
  953.  
  954. Delgrossi & Berger, Editors   Experimental                     [Page 17]
  955.  
  956. RFC 1819              ST2+ Protocol Specification            August 1995
  957.  
  958.  
  959.    basis.
  960.  
  961.    An example of the FlowSpec negotiation procedure is illustrated in
  962.    Figure 4. Depending on the success of its local reservations, the LRM
  963.    updates the FlowSpec fields and returns the FlowSpec to the ST agent,
  964.    which passes it downstream as part of the connection message.
  965.    Eventually, the FlowSpec is communicated to the application at the
  966.    target which may base its accept/reject decision for establishing the
  967.    connection on it and may finally also modify the FlowSpec. If a
  968.    target accepts the connection, the (possibly modified) FlowSpec is
  969.    propagated back to the origin which can then calculate an overall
  970.    service quality for all targets. The application entity at the origin
  971.    may later request a CHANGE to adjust reservations.
  972.  
  973.                  Origin                 Router               Target 1
  974.                 +------+      1a       +------+      1b      +------+
  975.                 |      |-------------->|      |------------->|      |
  976.                 +------+               +------+              +------+
  977.                  ^  | ^                                          |
  978.                  |  | |                    2                     |
  979.                  |  | +------------------------------------------+
  980.                  +  +
  981.  +-------------+  \  \             +-------------+       +-------------+
  982.  |Max Delay: 12|   \  \            |Max Delay: 12|       |Max Delay: 12|
  983.  |-------------|    \  \           |-------------|       |-------------|
  984.  |Min Delay:  2|     \  \          |Min Delay:  5|       |Min Delay:  9|
  985.  |-------------|      \  \         |-------------|       |-------------|
  986.  |Max Size:4096|       +  +        |Max Size:2048|       |Max Size:2048|
  987.  +-------------+       |  |        +-------------+       +-------------+
  988.     FlowSpec           |  | 1
  989.                        |  +---------------+
  990.                        |                  |
  991.                        |                  V
  992.                      2 |               +------+
  993.                        +---------------|      |
  994.                                        +------+
  995.                                        Target 2
  996.                                    +-------------+
  997.                                    |Max Delay: 12|
  998.                                    |-------------|
  999.                                    |Min Delay:  4|
  1000.                                    |-------------|
  1001.                                    |Max Size:4096|
  1002.                                    +-------------+
  1003.  
  1004.         Figure 4:  Quality-of-Service Negotiation with FlowSpecs
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010. Delgrossi & Berger, Editors   Experimental                     [Page 18]
  1011.  
  1012. RFC 1819              ST2+ Protocol Specification            August 1995
  1013.  
  1014.  
  1015. 1.6  Outline of This Document
  1016.  
  1017.    This document contains the specification of the ST2+ version of the
  1018.    ST2 protocol. In the rest of the document, whenever the terms "ST" or
  1019.    "ST2" are used, they refer to the ST2+ version of ST2.
  1020.  
  1021.    The document is organized as follows:
  1022.  
  1023. o   Section 2 describes the ST2 user service from an application point
  1024.     of view.
  1025.  
  1026. o   Section 3 illustrates the ST2 data transfer protocol, ST.
  1027.  
  1028. o   Section 4 through Section 8 specify the ST2 setup protocol, SCMP.
  1029.  
  1030. o   the ST2 flow specification is presented in Section 9.
  1031.  
  1032. o   the formats of protocol elements and PDUs are defined in Section 10.
  1033.  
  1034. 2.  ST2 User Service Description
  1035.  
  1036.    This section describes the ST user service from the high-level point
  1037.    of view of an application. It defines the ST stream operations and
  1038.    primitive functions. It specifies which operations on streams can be
  1039.    invoked by the applications built on top of ST and when the ST
  1040.    primitive functions can be legally executed. Note that the presented
  1041.    ST primitives do not specify an API. They are used here with the only
  1042.    purpose of illustrating the service model for ST.
  1043.  
  1044. 2.1  Stream Operations and Primitive Functions
  1045.  
  1046.    An ST application at the origin may create, expand, reduce, change,
  1047.    send data to, and delete a stream. When a stream is expanded, new
  1048.    targets are added to the stream; when a stream is reduced, some of
  1049.    the current targets are dropped from it. When a stream is changed,
  1050.    the associated quality of service is modified.
  1051.  
  1052.    An ST application at the target may join, receive data from, and
  1053.    leave a stream. This translates into the following stream operations:
  1054.  
  1055. o   OPEN: create new stream [origin], CLOSE: delete stream [origin],
  1056.  
  1057. o   ADD: expand stream, i.e., add new targets to it [origin],
  1058.  
  1059. o   DROP: reduce stream, i.e., drop targets from it [origin],
  1060.  
  1061. o   JOIN: join a stream [target], LEAVE: leave a stream [target],
  1062.  
  1063.  
  1064.  
  1065.  
  1066. Delgrossi & Berger, Editors   Experimental                     [Page 19]
  1067.  
  1068. RFC 1819              ST2+ Protocol Specification            August 1995
  1069.  
  1070.  
  1071. o   DATA: send data through stream [origin],
  1072.  
  1073. o   CHG: change a stream's QoS [origin],
  1074.  
  1075.    Each stream operation may require the execution of several primitive
  1076.    functions to be completed. For instance, to open a new stream, a
  1077.    request is first issued by the sender and an indication is generated
  1078.    at one or more receivers; then, the receivers may each accept or
  1079.    refuse the request and the correspondent indications are generated at
  1080.    the sender. A single receiver case is shown in Figure 5 below.
  1081.  
  1082.                 Sender             Network             Receiver
  1083.                   |                   |                   |
  1084.      OPEN.req     |                   |                   |
  1085.                   |-----------------> |                   |
  1086.                   |                   |-----------------> |
  1087.                   |                   |                   | OPEN.ind
  1088.                   |                   |                   | OPEN.accept
  1089.                   |                   |<----------------- |
  1090.                   |<----------------- |                   |
  1091.   OPEN.accept-ind |                   |                   |
  1092.                   |                   |                   |
  1093.  
  1094.            Figure 5: Primitives for the OPEN Stream Operation
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122. Delgrossi & Berger, Editors   Experimental                     [Page 20]
  1123.  
  1124. RFC 1819              ST2+ Protocol Specification            August 1995
  1125.  
  1126.  
  1127.    Table 1 defines the ST service primitive functions associated to each
  1128.    stream operation. The column labelled "O/T" indicates whether the
  1129.    primitive is executed at the origin or at the target.
  1130.  
  1131.            +===================================================+
  1132.            |Primitive      | Descriptive                   |O/T|
  1133.            |===================================================|
  1134.            |OPEN.req       | open a stream                 | O |
  1135.            |OPEN.ind       | connection request indication | T |
  1136.            |OPEN.accept    | accept stream                 | T |
  1137.            |OPEN.refuse    | refuse stream                 | T |
  1138.            |OPEN.accept-ind| connection accept indication  | O |
  1139.            |OPEN.refuse-ind| connection refuse indication  | O |
  1140.            |ADD.req        | add targets to stream         | O |
  1141.            |ADD.ind        | add request indication        | T |
  1142.            |ADD.accept     | accept stream                 | T |
  1143.            |ADD.refuse     | refuse stream                 | T |
  1144.            |ADD.accept-ind | add accept indication         | O |
  1145.            |ADD.refuse-ind | add refuse indication         | O |
  1146.            |JOIN.req       | join a stream                 | T |
  1147.            |JOIN.ind       | join request indication       | O |
  1148.            |JOIN.reject    | reject a join                 | O |
  1149.            |JOIN.reject-ind| join reject indication        | T |
  1150.            |DATA.req       | send data                     | O |
  1151.            |DATA.ind       | receive data indication       | T |
  1152.            |CHG.req        | change stream QoS             | O |
  1153.            |CHG.ind        | change request indication     | T |
  1154.            |CHG.accept     | accept change                 | T |
  1155.            |CHG.refuse     | refuse change                 | T |
  1156.            |CHG.accept-ind | change accept indication      | O |
  1157.            |CHG.refuse-ind | change refuse indication      | O |
  1158.            |DROP.req       | drop targets                  | O |
  1159.            |DROP.ind       | disconnect indication         | T |
  1160.            |LEAVE.req      | leave stream                  | T |
  1161.            |LEAVE.ind      | leave stream indication       | O |
  1162.            |CLOSE.req      | close stream                  | O |
  1163.            |CLOSE.ind      | close stream indication       | T |
  1164.            +---------------------------------------------------+
  1165.  
  1166.                               Table 1: ST Primitives
  1167.  
  1168. 2.2  State Diagrams
  1169.  
  1170.    It is not sufficient to define the set of ST stream operations. It is
  1171.    also necessary to specify when the operations can be legally
  1172.    executed.  For this reason, a set of states is now introduced and the
  1173.    transitions from one state to the others are specified. States are
  1174.    defined with respect to a single stream. The previously defined
  1175.  
  1176.  
  1177.  
  1178. Delgrossi & Berger, Editors   Experimental                     [Page 21]
  1179.  
  1180. RFC 1819              ST2+ Protocol Specification            August 1995
  1181.  
  1182.  
  1183.    stream operations can be legally executed only from an appropriate
  1184.    state.
  1185.  
  1186.    An ST agent may, with respect to an ST stream, be in one of the
  1187.    following states:
  1188.  
  1189. o   IDLE: the stream has not been created yet.
  1190.  
  1191. o   PENDING: the stream is in the process of being established.
  1192.  
  1193. o   ACTIVE: the stream is established and active.
  1194.  
  1195. o   ADDING: the stream is established. A stream expansion is underway.
  1196.  
  1197. o   CHGING: the stream is established. A stream change is underway.
  1198.  
  1199.    Previous experience with ST has lead to limits on stream operations
  1200.    that can be executed simultaneously. These restrictions are:
  1201.  
  1202.  
  1203.    1.  A single ADD or CHG operation can be processed at one time. If
  1204.        an ADD or CHG is already underway, further requests are queued
  1205.        by the ST agent and handled only after the previous operation
  1206.        has been completed. This also applies to two subsequent
  1207.        requests of the same kind, e.g., two ADD or two CHG operations.
  1208.        The second operation is not executed until the first one has
  1209.        been completed.
  1210.  
  1211.    2.  Deleting a stream, leaving a stream, or dropping targets from a
  1212.        stream is possible only after stream establishment has been
  1213.        completed. A stream is considered to be established when all
  1214.        the next-hops of the origin have either accepted or refused the
  1215.        stream.  Note that stream refuse is automatically forced after
  1216.        timeout if no reply comes from a next-hop.
  1217.  
  1218.    3.  An ST agent forwards data only along already established paths
  1219.        to the targets, see also Section 3.1. A path is considered to
  1220.        be established when the next-hop on the path has explicitly
  1221.        accepted the stream. This implies that the target and all other
  1222.        intermediate ST agents are ready to handle the incoming data
  1223.        packets. In no cases an ST agent will forward data to a
  1224.        next-hop ST agent that has not explicitly accepted the stream.
  1225.        To be sure that all targets receive the data, an application
  1226.        should send the data only after all paths have been
  1227.        established, i.e., the stream is established.
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234. Delgrossi & Berger, Editors   Experimental                     [Page 22]
  1235.  
  1236. RFC 1819              ST2+ Protocol Specification            August 1995
  1237.  
  1238.  
  1239.    4.  It is allowed to send data from the CHGING and ADDING states.
  1240.        While sending data from the CHGING state, the quality of
  1241.        service to the targets affected by the change should be assumed
  1242.        to be the more restrictive quality of service. When sending
  1243.        data from the ADDING state, the targets that receive the data
  1244.        include at least all the targets that were already part of the
  1245.        stream at the time the ADD operation was invoked.
  1246.  
  1247.    The rules introduced above require ST agents to queue incoming
  1248.    requests when the current state does not allow to process them
  1249.    immediately. In order to preserve the semantics, ST agents have to
  1250.    maintain the order of the requests, i.e., implement FIFO queuing.
  1251.    Exceptionally, the CLOSE request at the origin and the LEAVE request
  1252.    at the target may be immediately processed: in these cases, the queue
  1253.    is deleted and it is possible that requests in the queue are not
  1254.    processed.
  1255.  
  1256.    The following state diagrams define the ST service. Separate diagrams
  1257.    are presented for the origin and the targets.
  1258.  
  1259.    The symbol (a/r)* indicates that all targets in the target list have
  1260.    explicitly accepted or refused the stream, or refuse has been forced
  1261.    after timeout. If the target list is empty, i.e., it contains no
  1262.    targets, the (a/r)* condition is immediately satisfied, so the empty
  1263.    stream is created and state ESTBL is entered.
  1264.  
  1265.    The separate OPEN and ADD primitives at the target are for conceptual
  1266.    purposes only. The target is actually unable to distinguish between
  1267.    an OPEN and an ADD. This is reflected in Figure 7 and Table 3 through
  1268.    the notation OPEN/ADD.
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290. Delgrossi & Berger, Editors   Experimental                     [Page 23]
  1291.  
  1292. RFC 1819              ST2+ Protocol Specification            August 1995
  1293.  
  1294.  
  1295.                         +------------+
  1296.                         |            |<-------------------+
  1297.             +---------->|    IDLE    |-------------+      |
  1298.             |           |            |    OPEN.req |      |
  1299.             |           +------------+             |      |
  1300.  CLOSE.req  |      CLOSE.req ^   ^ CLOSE.req       V      | CLOSE.req
  1301.             |                |   |            +---------+ |
  1302.             |                |   |            | PENDING |-|-+ JOIN.reject
  1303.             |                |   -------------|         |<|-+
  1304.             |    JOIN.reject |                +---------+ |
  1305.             |    DROP.req +----------+             |      |
  1306.             |       +-----|          |             |      |
  1307.             |       |     |  ESTDL   | OPEN.(a/r)* |      |
  1308.             |       +---->|          |<------------+      |
  1309.             |             +----------+                    |
  1310.             |              |  ^  |  ^                     |
  1311.             |              |  |  |  |                     |
  1312.        +----------+ CHG.req|  |  |  | Add.(a/r)*    +----------+
  1313.        |          |<-------+  |  |  +-------------- |          |
  1314.        |  CHGING  |           |  |                  |  ADDING  |
  1315.        |          |-----------+  +----------------->|          |
  1316.        +----------+ CHG.(a/r)*         JOIN.ind     +----------+
  1317.            |   ^                         ADD.req        |   ^
  1318.            |   |                                        |   |
  1319.            +---+                                        +---+
  1320.            DROP.req                                    DROP.req
  1321.            JOIN.reject                                 JOIN.reject
  1322.  
  1323.                   Figure 6: ST Service at the Origin
  1324.  
  1325.                  +--------+
  1326.                  |        |-----------------------+
  1327.                  |  IDLE  |                       |
  1328.                  |        |<---+                  | OPEN/ADD.ind
  1329.                  +--------+    | CLOSE.ind        | JOIN.req
  1330.                      ^         | OPEN/ADD.refuse  |
  1331.                      |         | JOIN.refect-ind  |
  1332.          CLOSE.ind   |         |                  V
  1333.          DROP.ind    |         |             +---------+
  1334.          LEAVE.req   |         +-------------|         |
  1335.                      |                       | PENDING |
  1336.                  +-------+                   |         |
  1337.                  |       |                   +---------+
  1338.                  | ESTBL |    OPEN/ADD.accept     |
  1339.                  |       |<-----------------------+
  1340.                  +-------+
  1341.  
  1342.                      Figure 7: ST Service at the Target
  1343.  
  1344.  
  1345.  
  1346. Delgrossi & Berger, Editors   Experimental                     [Page 24]
  1347.  
  1348. RFC 1819              ST2+ Protocol Specification            August 1995
  1349.  
  1350.  
  1351. 2.3  State Transition Tables
  1352.  
  1353.    Table 2 and Table 3 define which primitives can be processed from
  1354.    which states and the possible state transitions.
  1355.  
  1356. +======================================================================+
  1357. |Primitive      |IDLE|    PENDING    |  ESTBL |    CHGING  |    ADDING |
  1358. |======================================================================|
  1359. |OPEN.req       | ok | -             | -      | -          | -         |
  1360. |OPEN.accept-ind| -  |if(a,r)*->ESTBL| -      | -          | -         |
  1361. |OPEN.refuse-ind| -  |if(a,r)*->ESTBL| -      | -          | -         |
  1362. |ADD.req        | -  | queued        |->ADDING| queued     | queued    |
  1363. |ADD.accept-ind | -  | -             | -      | -          |if(a,r)*   |
  1364. |               | -  | -             | -      | -          |->ESTBL    |
  1365. |ADD.refuse-ind | -  | -             | -      | -          |if(a,r)*   |
  1366. |               | -  | -             | -      | -          |->ESTBL    |
  1367. |JOIN.ind       | -  | queued        |->ADDING| queued     |queued     |
  1368. |JOIN.reject    | -  | OK            | ok     | ok         | ok        |
  1369. |DATA.req       | -  | -             | ok     | ok         | ok        |
  1370. |CHG.req        | -  | queued        |->CHGING| queued     |queued     |
  1371. |CHG.accept-ind | -  | -             | -      |if(a,r)*    | -         |
  1372. |               | -  | -             | -      |->ESTBL     | -         |
  1373. |CHG.refuse.ind | -  | -             | -      |if(a,r)*    | -         |
  1374. |               | -  | -             | -      |->ESTBL     | -         |
  1375. |DROP.req       | -  | -             | ok     | ok         | ok        |
  1376. |LEAVE.ind      | -  | OK            | ok     | ok         | ok        |
  1377. |CLOSE.req      | -  | OK            | ok     | ok         | ok        |
  1378. +----------------------------------------------------------------------+
  1379.                 Table 2: Primitives and States at the Origin
  1380.  
  1381.              +======================================================+
  1382.              | Primitive       |   IDLE    |  PENDING   |   ESTBL   |
  1383.              |======================================================|
  1384.              | OPEN/ADD.ind    | ->PENDING | -          | -         |
  1385.              | OPEN/ADD.accept | -         | ->ESTBL    | -         |
  1386.              | OPEN/ADD.refuse | -         | ->IDLE     | -         |
  1387.              | JOIN.req        | ->PENDING | -          | -         |
  1388.              | JOIN.reject-ind |-          | ->IDLE     | -         |
  1389.              | DATA.ind        | -         | -          | ok        |
  1390.              | CHG.ind         | -         | -          | ok        |
  1391.              | CHG.accept      | -         | -          | ok        |
  1392.              | DROP.ind        | -         | ok         | ok        |
  1393.              | LEAVE.req       | -         | ok         | ok        |
  1394.              | CLOSE.ind       | -         | ok         | ok        |
  1395.              | CHG.ind         | -         | -          | ok        |
  1396.              +------------------------------------------------------+
  1397.                 Table 3: Primitives and States at the Target
  1398.  
  1399.  
  1400.  
  1401.  
  1402. Delgrossi & Berger, Editors   Experimental                     [Page 25]
  1403.  
  1404. RFC 1819              ST2+ Protocol Specification            August 1995
  1405.  
  1406.  
  1407. 3.  The ST2 Data Transfer Protocol
  1408.  
  1409.    This section presents the ST2 data transfer protocol, ST. First, data
  1410.    transfer is described in Section 3.1, then, the data transfer
  1411.    protocol functions are illustrated in Section 3.2.
  1412.  
  1413. 3.1  Data Transfer with ST
  1414.  
  1415.    Data transmission with ST is unreliable. An application is not
  1416.    guaranteed that the data reaches its destinations and ST makes no
  1417.    attempts to recover from packet loss, e.g., due to the underlying
  1418.    network. However, if the data reaches its destination, it should do
  1419.    so according to the quality of service associated with the stream.
  1420.  
  1421.    Additionally, ST may deliver data corrupted in transmission. Many
  1422.    types of real-time data, such as digital audio and video, require
  1423.    partially correct delivery only. In many cases, retransmitted packets
  1424.    would arrive too late to meet their real-time delivery requirements.
  1425.    On the other hand, depending on the data encoding and the particular
  1426.    application, a small number of errors in stream data are acceptable.
  1427.    In any case, reliability can be provided by layers on top of ST2 if
  1428.    needed.
  1429.  
  1430.    Also, no data fragmentation is supported during the data transfer
  1431.    phase. The application is expected to segment its data PDUs according
  1432.    to the minimum MTU over all paths in the stream. The application
  1433.    receives information on the MTUs relative to the paths to the targets
  1434.    as part of the ACCEPT message, see Section 8.6. The minimum MTU over
  1435.    all paths can be calculated from the MTUs relative to the single
  1436.    paths. ST agents silently discard too long data packets, see also
  1437.    Section 5.1.1.
  1438.  
  1439.    An ST agent forwards the data only along already established paths to
  1440.    targets. A path is considered to be established once the next-hop ST
  1441.    agent on the path sends an ACCEPT message, see Section 2.2. This
  1442.    implies that the target and all other intermediate ST agents on the
  1443.    path to the target are ready to handle the incoming data packets. In
  1444.    no cases will an ST agent forward data to a next-hop ST agent that
  1445.    has not explicitly accepted the stream.
  1446.  
  1447.    To be reasonably sure that all targets receive the data with the
  1448.    desired quality of service, an application should send the data only
  1449.    after the whole stream has been established. Depending on the local
  1450.    API, an application may not be prevented from sending data before the
  1451.    completion of stream setup, but it should be aware that the data
  1452.    could be lost or not reach all intended targets. This behavior may
  1453.    actually be desirable to applications, such as those application that
  1454.    have multiple targets which can each process data as soon as it is
  1455.  
  1456.  
  1457.  
  1458. Delgrossi & Berger, Editors   Experimental                     [Page 26]
  1459.  
  1460. RFC 1819              ST2+ Protocol Specification            August 1995
  1461.  
  1462.  
  1463.    available (e.g., a lecture or distributed gaming).
  1464.  
  1465.    It is desirable for implementations to take advantage of networks
  1466.    that support multicast. If a network does not support multicast, or
  1467.    for the case where the next-hops are on different networks, multiple
  1468.    copies of the data packet must be sent.
  1469.  
  1470. 3.2  ST Protocol Functions
  1471.  
  1472.    The ST protocol provides two functions:
  1473.  
  1474.    o   stream identification
  1475.  
  1476.    o   data priority
  1477.  
  1478. 3.2.1  Stream Identification
  1479.  
  1480.    ST data packets are encapsulated by an ST header containing the
  1481.    Stream IDentifier (SID). This SID is selected at the origin so that
  1482.    it is globally unique over the Internet. The SID must be known by the
  1483.    setup protocol as well. At stream establishment time, the setup
  1484.    protocol builds, at each agent traversed by the stream, an entry into
  1485.    its local database containing stream information. The SID can be used
  1486.    as a reference into this database, to obtain quickly the necessary
  1487.    replication and forwarding information.
  1488.  
  1489.    Stream IDentifiers are intended to be used to make the packet
  1490.    forwarding task most efficient. The time-critical operation is an
  1491.    intermediate ST agent receiving a packet from the previous-hop ST
  1492.    agent and forwarding it to the next-hop ST agents.
  1493.  
  1494.    The format of data PDUs including the SID is defined in Section 10.1.
  1495.    Stream IDentifier generation is discussed in Section 8.1.
  1496.  
  1497. 3.2.2  Packet Discarding based on Data Priority
  1498.  
  1499.    ST provides a well defined quality of service to its applications.
  1500.    However, there may be cases where the network is temporarily
  1501.    congested and the ST agents have to discard certain packets to
  1502.    minimize the overall impact to other streams. The ST protocol
  1503.    provides a mechanism to discard data packets based on the Priority
  1504.    field in the data PDU, see Section 10.1. The application assigns each
  1505.    data packet with a discard-priority level, carried into the Priority
  1506.    field. ST agents will attempt to discard lower priority packets first
  1507.    during periods of network congestion. Applications may choose to send
  1508.    data at multiple priority levels so that less important data may be
  1509.    discarded first.
  1510.  
  1511.  
  1512.  
  1513.  
  1514. Delgrossi & Berger, Editors   Experimental                     [Page 27]
  1515.  
  1516. RFC 1819              ST2+ Protocol Specification            August 1995
  1517.  
  1518.  
  1519. 4.  SCMP Functional Description
  1520.  
  1521.    ST agents create and manage streams using the ST Control Message
  1522.    Protocol (SCMP). Conceptually, SCMP resides immediately above ST (as
  1523.    does ICMP above IP). SCMP follows a request-response model. SCMP
  1524.    messages are made reliable through the use of retransmission after
  1525.    timeout.
  1526.  
  1527.    This section contains a functional description of stream management
  1528.    with SCMP. To help clarify the SCMP exchanges used to setup and
  1529.    maintain ST streams, we include an example of a simple network
  1530.    topology, represented in Figure 8. Using the SCMP messages described
  1531.    in this section it will be possible for an ST application to:
  1532.  
  1533.    o   Create a stream from A to the peers at B, C and D,
  1534.  
  1535.    o   Add a peer at E,
  1536.  
  1537.    o   Drop peers B and C, and
  1538.  
  1539.    o   Let F join the stream
  1540.  
  1541.    o   Delete the stream.
  1542.  
  1543.  
  1544.  
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570. Delgrossi & Berger, Editors   Experimental                     [Page 28]
  1571.  
  1572. RFC 1819              ST2+ Protocol Specification            August 1995
  1573.  
  1574.  
  1575.                                                +---------+    +---+
  1576.                                                |         |----| B |
  1577.                +---------+      +----------+   |         |    +---+
  1578.                |         |------| Router 1 |---| Subnet2 |
  1579.                |         |      +----------+   |         |
  1580.                |         |                     |         |
  1581.                |         |                     +---------+
  1582.                |         |                         |
  1583.                | Subnet1 |                         |
  1584.                |         |                     +----------+
  1585.                |         |                     | Router 3 |
  1586.        +---+   |         |                     +----------+
  1587.        | A |---|         |    +----------+           |
  1588.        +---+   |         |----| Router 2 |           |
  1589.                |         |    +----------+           |
  1590.                +---------+         |                 |
  1591.                                    |                 |
  1592.                                    |          +----------+    +---+
  1593.                                    +----------|          |----| C |
  1594.                                               |          |    +---+
  1595.                          +---------+          |  Subnet3 |
  1596.                  +---+   |         |   +---+  |          |    +---+
  1597.                  | F |---| Subnet4 |---| E |--|          |----| D |
  1598.                  +---+   |         |   +---+  +----------+    +---+
  1599.                          +---------+
  1600.  
  1601.                 Figure 8:  Sample Topology for an ST Stream
  1602.  
  1603.    We first describe the possible types of stream in Section 4.1;
  1604.    Section 4.2 introduces SCMP control message types; SCMP reliability
  1605.    is discussed in Section 4.3; stream options are covered in Section
  1606.    4.4; stream setup is presented in Section 4.5; Section 4.6
  1607.    illustrates stream modification including stream expansion,
  1608.    reduction, changes of the quality of service associated to a stream.
  1609.    Finally, stream deletion is handled in Section 4.7.
  1610.  
  1611. 4.1  Types of Streams
  1612.  
  1613.    SCMP allows for the setup and management of different types of
  1614.    streams. Streams differ in the way they are built and the information
  1615.    maintained on connected targets.
  1616.  
  1617.  
  1618.  
  1619.  
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626. Delgrossi & Berger, Editors   Experimental                     [Page 29]
  1627.  
  1628. RFC 1819              ST2+ Protocol Specification            August 1995
  1629.  
  1630.  
  1631. 4.1.1  Stream Building
  1632.  
  1633.    Streams may be built in a sender-oriented fashion, receiver-oriented
  1634.    fashion, or with a mixed approach:
  1635.  
  1636. o   in the sender-oriented fashion, the application at the origin
  1637.     provides the ST agent with the list of receivers for the stream. New
  1638.     targets, if any, are also added from the origin.
  1639.  
  1640. o   in the receiver-oriented approach, the application at the origin
  1641.     creates an empty stream that contains no targets. Each target then
  1642.     joins the stream autonomously.
  1643.  
  1644. o   in the mixed approach, the application at the origin creates a
  1645.     stream that contains some targets and other targets join the stream
  1646.     autonomously.
  1647.  
  1648.    ST2 provides stream options to support sender-oriented and mixed
  1649.    approach steams. Receiver-oriented streams can be emulated through
  1650.    the use of mixed streams. The fashion by which targets may be added
  1651.    to a particular stream is controlled via join authorization levels.
  1652.    Join authorization levels are described in Section 4.4.2.
  1653.  
  1654. 4.1.2  Knowledge of Receivers
  1655.  
  1656.    When streams are built in the sender-oriented fashion, all ST agents
  1657.    will have full information on all targets down stream of a particular
  1658.    agent. In this case, target information is relayed down stream from
  1659.    agent-to-agent during stream set-up.
  1660.  
  1661.    When targets add themselves to mixed approach streams, upstream ST
  1662.    agents may or may not be informed. Propagation of information on
  1663.    targets that "join" a stream is also controlled via join
  1664.    authorization levels. As previously mentioned, join authorization
  1665.    levels are described in Section 4.4.2.
  1666.  
  1667.    This leads to two types of streams:
  1668.  
  1669. o   full target information is propagated in a full-state stream. For
  1670.     such streams, all agents are aware of all downstream targets
  1671.     connected to the stream. This results in target information being
  1672.     maintained at the origin and at intermediate agents. Operations on
  1673.     single targets are always possible, i.e., change a certain target,
  1674.     or, drop that target from the stream. It is also always possible for
  1675.     any ST agent to attempt recovery of all downstream targets.
  1676.  
  1677.  
  1678.  
  1679.  
  1680.  
  1681.  
  1682. Delgrossi & Berger, Editors   Experimental                     [Page 30]
  1683.  
  1684. RFC 1819              ST2+ Protocol Specification            August 1995
  1685.  
  1686.  
  1687. o   in light-weight streams, it is possible that the origin and other
  1688.     upstream agents have no knowledge about some targets. This results
  1689.     in less maintained state and easier stream management, but it limits
  1690.     operations on specific targets. Special actions may be required to
  1691.     support change and drop operations on unknown targets, see Section
  1692.     5.7. Also, stream recovery may not be possible. Of course, generic
  1693.     functions such as deleting the whole stream, are still possible. It
  1694.     is expected that applications that will have a large number of
  1695.     targets will use light-weight streams in order to limit state in
  1696.     agents and the number of targets per control message.
  1697.  
  1698.    Full-state streams serve well applications as video conferencing or
  1699.    distributed gaming, where it is important to have knowledge on the
  1700.    connected receivers, e.g., to limit who participates. Light-weight
  1701.    streams may be exploited by applications such as remote lecturing or
  1702.    playback applications of radio and TV broadcast where the receivers
  1703.    do not need to be known by the sender. Section 4.4.2 defines join
  1704.    authorization levels, which support two types of full-state streams
  1705.    and one type of light-weight stream.
  1706.  
  1707. 4.2  Control PDUs
  1708.  
  1709.    SCMP defines the following PDUs (the main purpose of each PDU is also
  1710.    indicated):
  1711.  
  1712. 1.      ACCEPT          to accept a new stream
  1713. 2.      ACK             to acknowledge an incoming message
  1714. 3.      CHANGE          to change the quality of service associated with
  1715.                                 a stream
  1716. 4.      CONNECT         to establish a new stream or add new targets to
  1717.                                 an existing stream
  1718. 5.      DISCONNECT      to remove some or all of the stream's targets
  1719. 6.      ERROR           to indicate an error contained in an incoming
  1720.                                 message
  1721. 7.      HELLO           to detect failures of neighbor ST agents
  1722. 8.      JOIN            to request stream joining from a target
  1723. 9.      JOIN-REJECT     to reject a stream joining request from a target
  1724. 10.     NOTIFY          to inform an ST agent of a significant event
  1725. 11.     REFUSE          to refuse the establishment of a new stream
  1726. 12.     STATUS          to query an ST agent on a specific stream
  1727. 13.     STATUS-RESPONSE to reply queries on a specific stream
  1728.  
  1729.    SCMP follows a request-response model with all requests expecting
  1730.    responses. Retransmission after timeout is used to allow for lost or
  1731.    ignored messages. Control messages do not extend across packet
  1732.    boundaries; if a control message is too large for the MTU of a hop,
  1733.    its information is partitioned and a control message per partition is
  1734.    sent, as described in Section 5.1.2.
  1735.  
  1736.  
  1737.  
  1738. Delgrossi & Berger, Editors   Experimental                     [Page 31]
  1739.  
  1740. RFC 1819              ST2+ Protocol Specification            August 1995
  1741.  
  1742.  
  1743.    CONNECT and CHANGE request messages are answered with ACCEPT messages
  1744.    which indicate success, and with REFUSE messages which indicate
  1745.    failure. JOIN messages are answered with either a CONNECT message
  1746.    indicating success, or with a JOIN-REJECT message indicating failure.
  1747.    Targets may be removed from a stream by either the origin or the
  1748.    target via the DISCONNECT and REFUSE messages.
  1749.  
  1750.    The ACCEPT, CHANGE, CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY
  1751.    and REFUSE messages must always be explicitly acknowledged:
  1752.  
  1753. o   with an ACK message, if the message was received correctly and it
  1754.     was possible to parse and correctly extract and interpret its
  1755.     header, fields and parameters,
  1756.  
  1757. o   with an ERROR message, if a syntax error was detected in the header,
  1758.     fields, or parameters included in the message. The errored PDU may
  1759.     be optionally returned as part of the ERROR message. An ERROR
  1760.     message indicates a syntax error only. If any other errors are
  1761.     detected, it is necessary to first acknowledge with ACK and then
  1762.     take appropriate actions. For instance, suppose a CHANGE message
  1763.     contains an unknown SID: first, an ACK message has to be sent, then
  1764.     a REFUSE message with ReasonCode (SIDUnknown) follows.
  1765.  
  1766.    If no ACK or ERROR message are received before the correspondent
  1767.    timer expires, a timeout failure occurs. The way an ST agent should
  1768.    handle timeout failures is described in Section 5.2.
  1769.  
  1770.    ACK, ERROR, and STATUS-RESPONSE messages are never acknowledged.
  1771.  
  1772.    HELLO messages are a special case. If they contain a syntax error, an
  1773.    ERROR message should be generated in response. Otherwise, no
  1774.    acknowledgment or response should be generated. Use of HELLO messages
  1775.    is discussed in Section 6.1.2.
  1776.  
  1777.    STATUS messages containing a syntax error should be answered with an
  1778.    ERROR message. Otherwise, a STATUS-RESPONSE message should be sent
  1779.    back in response. Use of STATUS and STATUS-RESPONSE are discussed in
  1780.    Section 8.4.
  1781.  
  1782. 4.3  SCMP Reliability
  1783.  
  1784.    SCMP is made reliable through the use of retransmission when a
  1785.    response is not received in a timely manner. The ACCEPT, CHANGE,
  1786.    CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY, and REFUSE messages
  1787.    all must be answered with an ACK message, see Section 4.2. In
  1788.    general, when sending a SCMP message which requires an ACK response,
  1789.    the sending ST agent needs to set the Toxxxx timer (where xxxx is the
  1790.    SCMP message type, e.g., ToConnect). If it does not receive an ACK
  1791.  
  1792.  
  1793.  
  1794. Delgrossi & Berger, Editors   Experimental                     [Page 32]
  1795.  
  1796. RFC 1819              ST2+ Protocol Specification            August 1995
  1797.  
  1798.  
  1799.    before the Toxxxx timer expires, the ST agent should retransmit the
  1800.    SCMP message. If no ACK has been received within Nxxxx
  1801.    retransmissions, then a SCMP timeout condition occurs and the ST
  1802.    agent enters its SCMP timeout recovery state. The actions performed
  1803.    by the ST agent as the result of the SCMP timeout condition differ
  1804.    for different SCMP messages and are described in Section 5.2.
  1805.  
  1806.    For some SCMP messages (CONNECT, CHANGE, JOIN, and STATUS) the
  1807.    sending ST agent also expects a response back (ACCEPT/REFUSE,
  1808.    CONNECT/JOIN- REJECT) after ACK has been received. For these cases,
  1809.    the ST agent needs to set the ToxxxxResp timer after it receives the
  1810.    ACK. (As before, xxxx is the initiating SCMP message type, e.g.,
  1811.    ToConnectResp).  If it does not receive the appropriate response back
  1812.    when ToxxxxResp expires, the ST agent updates its state and performs
  1813.    appropriate recovery action as described in Section 5.2. Suggested
  1814.    constants are given in Section 10.5.4.
  1815.  
  1816.    The timeout and retransmission algorithm is implementation dependent
  1817.    and it is outside the scope of this document. Most existing
  1818.    algorithms are based on an estimation of the Round Trip Time (RTT)
  1819.    between two agents. Therefore, SCMP contains a mechanism, see Section
  1820.    8.5, to estimate this RTT. Note that the timeout related variable
  1821.    names described above are for reference purposes only, implementors
  1822.    may choose to combine certain variables.
  1823.  
  1824. 4.4  Stream Options
  1825.  
  1826.    An application may select among some stream options. The desired
  1827.    options are indicated to the ST agent at the origin when a new stream
  1828.    is created. Options apply to single streams and are valid during the
  1829.    whole stream's lifetime. The options chosen by the application at the
  1830.    origin are included into the initial CONNECT message, see Section
  1831.    4.5.3. When a CONNECT message reaches a target, the application at
  1832.    the target is notified of the stream options that have been selected,
  1833.    see Section 4.5.5.
  1834.  
  1835. 4.4.1  No Recovery
  1836.  
  1837.    When a stream failure is detected, an ST agent would normally attempt
  1838.    stream recovery, as described in Section 6.2. The NoRecovery option
  1839.    is used to indicate that ST agents should not attempt recovery for
  1840.    the stream. The protocol behavior in the case that the NoRecovery
  1841.    option has been selected is illustrated in Section 6.2. The
  1842.    NoRecovery option is specified by setting the S-bit in the CONNECT
  1843.    message, see Section 10.4.4. The S-bit can be set only by the origin
  1844.    and it is never modified by intermediate and target ST agents.
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850. Delgrossi & Berger, Editors   Experimental                     [Page 33]
  1851.  
  1852. RFC 1819              ST2+ Protocol Specification            August 1995
  1853.  
  1854.  
  1855. 4.4.2  Join Authorization Level
  1856.  
  1857.    When a new stream is created, it is necessary to define the join
  1858.    authorization level associated with the stream. This level determines
  1859.    the protocol behavior in case of stream joining, see Section 4.1 and
  1860.    Section 4.6.3. The join authorization level for a stream is defined
  1861.    by the J-bit and N-bit in the CONNECT message header, see Section
  1862.    10.4.4.  One of the following authorization levels has to be
  1863.    selected:
  1864.  
  1865.    o   Level 0 - Refuse Join (JN = 00): No targets are allowed to join this
  1866.        stream.
  1867.  
  1868.    o   Level 1 - OK, Notify Origin (JN = 01): Targets are allowed to join
  1869.        the stream. The origin is notified that the target has joined.
  1870.  
  1871.    o   Level 2 - OK (JN = 10): Targets are allowed to join the stream. No
  1872.        notification is sent to the stream origin.
  1873.  
  1874.    Some applications may choose to maintain tight control on their
  1875.    streams and will not permit any connections without the origin's
  1876.    permission. For such streams, target applications may request to be
  1877.    added by sending an out-of-band, i.e., via regular IP, request to the
  1878.    origin. The origin, if it so chooses, can then add the target
  1879.    following the process described in Section 4.6.1.
  1880.  
  1881.    The selected authorization level impacts stream handling and the
  1882.    state that is maintained for the stream, as described in Section 4.1.
  1883.  
  1884. 4.4.3  Record Route
  1885.  
  1886.    The RecordRoute option can be used to request the route between the
  1887.    origin and a target be recorded and delivered to the application.
  1888.    This option may be used while connecting, accepting, changing, or
  1889.    refusing a stream. The results of a RecordRoute option requested by
  1890.    the origin, i.e., as part of the CONNECT or CHANGE messages, are
  1891.    delivered to the target. The results of a RecordRoute option
  1892.    requested by the target, i.e., as part of the ACCEPT or REFUSE
  1893.    messages, are delivered to the origin.
  1894.  
  1895.    The RecordRoute option is specified by adding the RecordRoute
  1896.    parameter to the mentioned SCMP messages. The format of the
  1897.    RecordRoute parameter is shown in Section 10.3.5. When adding this
  1898.    parameter, the ST agent at the origin must determine the number of
  1899.    entries that may be recorded as explained in Section 10.3.5.
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906. Delgrossi & Berger, Editors   Experimental                     [Page 34]
  1907.  
  1908. RFC 1819              ST2+ Protocol Specification            August 1995
  1909.  
  1910.  
  1911. 4.4.4  User Data
  1912.  
  1913.    The UserData option can be used by applications to transport
  1914.    application specific data along with some SCMP control messages. This
  1915.    option can be included with ACCEPT, CHANGE, CONNECT, DISCONNECT, and
  1916.    REFUSE messages. The format of the UserData parameter is shown in
  1917.    Section 10.3.7. This option may be included by the origin, or the
  1918.    target, by adding the UserData parameter to the mentioned SCMP
  1919.    messages. This option may only be included once per SCMP message.
  1920.  
  1921. 4.5  Stream Setup
  1922.  
  1923.    This section presents a description of stream setup. For simplicity,
  1924.    we assume that everything succeeds, e.g., any required resources are
  1925.    available, messages are properly delivered, and the routing is
  1926.    correct. Possible failures in the setup phase are handled in Section
  1927.    5.2.
  1928.  
  1929. 4.5.1  Information from the Application
  1930.  
  1931.    Before stream setup can be started, the application has to collect
  1932.    the necessary information to determine the characteristics for the
  1933.    connection. This includes identifying the participants and selecting
  1934.    the QoS parameters of the data flow. Information passed to the ST
  1935.    agent by the application includes:
  1936.  
  1937. o   the list of the stream's targets (Section 10.3.6). The list may be
  1938.     empty (Section 4.5.3.1),
  1939.  
  1940. o   the flow specification containing the desired quality of service for
  1941.     the stream (Section 9),
  1942.  
  1943. o   information on the groups in which the stream is a member, if any
  1944.     (Section 7),
  1945.  
  1946. o   information on the options selected for the stream (Section 4.4).
  1947.  
  1948. 4.5.2  Initial Setup at the Origin
  1949.  
  1950.    The ST agent at the origin then performs the following operations:
  1951.  
  1952. o   allocates a stream ID (SID) for the stream (Section 8.1),
  1953.  
  1954. o   invokes the routing function to determine the set of next-hops for
  1955.     the stream (Section 4.5.2.1),
  1956.  
  1957. o   invokes the Local Resource Manager (LRM) to reserve resources
  1958.     (Section 4.5.2.2),
  1959.  
  1960.  
  1961.  
  1962. Delgrossi & Berger, Editors   Experimental                     [Page 35]
  1963.  
  1964. RFC 1819              ST2+ Protocol Specification            August 1995
  1965.  
  1966.  
  1967. o   creates local database entries to store information on the new
  1968.     stream,
  1969.  
  1970. o   propagates the stream creation request to the next-hops determined
  1971.     by the routing function (Section 4.5.3).
  1972.  
  1973. 4.5.2.1  Invoking the Routing Function
  1974.  
  1975.    An ST agent that is setting up a stream invokes the routing function
  1976.    to find the next-hop to reach each of the targets specified by the
  1977.    target list provided by the application. This is similar to the
  1978.    routing decision in IP. However, in this case the route is to a
  1979.    multitude of targets with QoS requirements rather than to a single
  1980.    destination.
  1981.  
  1982.    The result of the routing function is a set of next-hop ST agents.
  1983.    The set of next-hops selected by the routing function is not
  1984.    necessarily the same as the set of next-hops that IP would select
  1985.    given a number of independent IP datagrams to the same destinations.
  1986.    The routing algorithm may attempt to optimize parameters other than
  1987.    the number of hops that the packets will take, such as delay, local
  1988.    network bandwidth consumption, or total internet bandwidth
  1989.    consumption.  Alternatively, the routing algorithm may use a simple
  1990.    route lookup for each target.
  1991.  
  1992.    Once a next-hop is selected by the routing function, it persists for
  1993.    the whole stream lifetime, unless a network failure occurs.
  1994.  
  1995. 4.5.2.2  Reserving Resources
  1996.  
  1997.    The ST agent invokes the Local Resource Manager (LRM) to perform the
  1998.    appropriate reservations. The ST agent presents the LRM with
  1999.    information including:
  2000.  
  2001. o   the flow specification with the desired quality of service for the
  2002.     stream (Section 9),
  2003.  
  2004. o   the version number associated with the flow specification
  2005.     (Section 9).
  2006.  
  2007. o   information on the groups the stream is member in, if any
  2008.     (Section 7),
  2009.  
  2010.    The flow specification contains information needed by the LRM to
  2011.    allocate resources. The LRM updates the flow specification contents
  2012.    information before returning it to the ST agent. Section 9.2.3
  2013.    defines the fields of the flow specification to be updated by the
  2014.    LRM.
  2015.  
  2016.  
  2017.  
  2018. Delgrossi & Berger, Editors   Experimental                     [Page 36]
  2019.  
  2020. RFC 1819              ST2+ Protocol Specification            August 1995
  2021.  
  2022.  
  2023.    The membership of a stream in a group may affect the amount of
  2024.    resources that have to be allocated by the LRM, see Section 7.
  2025.  
  2026. 4.5.3  Sending CONNECT Messages
  2027.  
  2028.    The ST agent sends a CONNECT message to each of the next-hop ST
  2029.    agents identified by the routing function. Each CONNECT message
  2030.    contains the SID, the selected stream options, the FlowSpec, and a
  2031.    TargetList. The format of the CONNECT message is defined by Section
  2032.    10.4.4. In general, the FlowSpec and TargetList depend on both the
  2033.    next-hop and the intervening network. Each TargetList is a subset of
  2034.    the original TargetList, identifying the targets that are to be
  2035.    reached through the next-hop to which the CONNECT message is being
  2036.    sent.
  2037.  
  2038.    The TargetList may be empty, see Section 4.5.3.1; if the TargetList
  2039.    causes a too long CONNECT message to be generated, the CONNECT
  2040.    message is partitioned as explained in Section 5.1.2. If multiple
  2041.    next-hops are to be reached through a network that supports network
  2042.    level multicast, a different CONNECT message must nevertheless be
  2043.    sent to each next-hop since each will have a different TargetList.
  2044.  
  2045. 4.5.3.1  Empty Target List
  2046.  
  2047.    An application at the origin may request the local ST agent to create
  2048.    an empty stream. It does so by passing an empty TargetList to the
  2049.    local ST agent during the initial stream setup. When the local ST
  2050.    agent receives a request to create an empty stream, it allocates the
  2051.    stream ID (SID), updates its local database entries to store
  2052.    information on the new stream and notifies the application that
  2053.    stream setup is complete. The local ST agent does not generate any
  2054.    CONNECT message for streams with an empty TargetList. Targets may be
  2055.    later added by the origin, see Section 4.6.1, or they may
  2056.    autonomously join the stream, see Section 4.6.3.
  2057.  
  2058. 4.5.4  CONNECT Processing by an Intermediate ST agent
  2059.  
  2060.    An ST agent receiving a CONNECT message, assuming no errors, responds
  2061.    to the previous-hop with an ACK. The ACK message must identify the
  2062.    CONNECT message to which it corresponds by including the reference
  2063.    number indicated by the Reference field of the CONNECT message. The
  2064.    intermediate ST agent calls the routing function, invokes the LRM to
  2065.    reserve resources, and then propagates the CONNECT messages to its
  2066.    next-hops, as described in the previous sections.
  2067.  
  2068.  
  2069.  
  2070.  
  2071.  
  2072.  
  2073.  
  2074. Delgrossi & Berger, Editors   Experimental                     [Page 37]
  2075.  
  2076. RFC 1819              ST2+ Protocol Specification            August 1995
  2077.  
  2078.  
  2079. 4.5.5  CONNECT Processing at the Targets
  2080.  
  2081.    An ST agent that is the target of a CONNECT message, assuming no
  2082.    errors, responds to the previous-hop with an ACK. The ST agent
  2083.    invokes the LRM to reserve local resources and then queries the
  2084.    specified application process whether or not it is willing to accept
  2085.    the connection.
  2086.  
  2087.    The application is presented with parameters from the CONNECT message
  2088.    including the SID, the selected stream options, Origin, FlowSpec,
  2089.    TargetList, and Group, if any, to be used as a basis for its
  2090.    decision.  The application is identified by a combination of the
  2091.    NextPcol field, from the Origin parameter, and the service access
  2092.    point, or SAP, field included in the correspondent (usually single
  2093.    remaining) Target of the TargetList. The contents of the SAP field
  2094.    may specify the port or other local identifier for use by the
  2095.    protocol layer above the host ST layer. Subsequently received data
  2096.    packets will carry the SID, that can be mapped into this information
  2097.    and be used for their delivery.
  2098.  
  2099.    Finally, based on the application's decision, the ST agent sends to
  2100.    the previous-hop from which the CONNECT message was received either
  2101.    an ACCEPT or REFUSE message. Since the ACCEPT (or REFUSE) message has
  2102.    to be acknowledged by the previous-hop, it is assigned a new
  2103.    Reference number that will be returned in the ACK. The CONNECT
  2104.    message to which ACCEPT (or REFUSE) is a reply is identified by
  2105.    placing the CONNECT's Reference number in the LnkReference field of
  2106.    ACCEPT (or REFUSE). The ACCEPT message contains the FlowSpec as
  2107.    accepted by the application at the target.
  2108.  
  2109. 4.5.6  ACCEPT Processing by an Intermediate ST agent
  2110.  
  2111.    When an intermediate ST agent receives an ACCEPT, it first verifies
  2112.    that the message is a response to an earlier CONNECT. If not, it
  2113.    responds to the next-hop ST agent with an ERROR message, with
  2114.    ReasonCode (LnkRefUnknown). Otherwise, it responds to the next-hop ST
  2115.    agent with an ACK, and propagates the individual ACCEPT message to
  2116.    the previous-hop along the same path traced by the CONNECT but in the
  2117.    reverse direction toward the origin.
  2118.  
  2119.    The FlowSpec is included in the ACCEPT message so that the origin and
  2120.    intermediate ST agents can gain access to the information that was
  2121.    accumulated as the CONNECT traversed the internet. Note that the
  2122.    resources, as specified in the FlowSpec in the ACCEPT message, may
  2123.    differ from the resources that were reserved when the CONNECT was
  2124.    originally processed. Therefore, the ST agent presents the LRM with
  2125.    the FlowSpec included in the ACCEPT message. It is expected that each
  2126.    LRM adjusts local reservations releasing any excess resources. The
  2127.  
  2128.  
  2129.  
  2130. Delgrossi & Berger, Editors   Experimental                     [Page 38]
  2131.  
  2132. RFC 1819              ST2+ Protocol Specification            August 1995
  2133.  
  2134.  
  2135.    LRM may choose not to adjust local reservations when that adjustment
  2136.    may result in the loss of needed resources. It may also choose to
  2137.    wait to adjust allocated resources until all targets in transition
  2138.    have been accepted or refused.
  2139.  
  2140.    In the case where the intermediate ST agent is acting as the origin
  2141.    with respect to this target, see Section 4.6.3.1, the ACCEPT message
  2142.    is not propagated upstream.
  2143.  
  2144. 4.5.7  ACCEPT Processing by the Origin
  2145.  
  2146.    The origin will eventually receive an ACCEPT (or REFUSE) message from
  2147.    each of the targets. As each ACCEPT is received, the application is
  2148.    notified of the target and the resources that were successfully
  2149.    allocated along the path to it, as specified in the FlowSpec
  2150.    contained in the ACCEPT message. The application may then use the
  2151.    information to either adopt or terminate the portion of the stream to
  2152.    each target.
  2153.  
  2154.    When an ACCEPT is received by the origin, the path to the target is
  2155.    considered to be established and the ST agent is allowed to forward
  2156.    the data along this path as explained in Section 2 and in Section
  2157.    3.1.
  2158.  
  2159. 4.5.8  REFUSE Processing by the Intermediate ST agent
  2160.  
  2161.    If an application at a target does not wish to participate in the
  2162.    stream, it sends a REFUSE message back to the origin with ReasonCode
  2163.    (ApplDisconnect). An intermediate ST agent that receives a REFUSE
  2164.    message with ReasonCode (ApplDisconnect) acknowledges it by sending
  2165.    an ACK to the next-hop, invokes the LRM to adjusts reservations as
  2166.    appropriate, deletes the target entry from the internal database, and
  2167.    propagates the REFUSE message back to the previous-hop ST agent.
  2168.  
  2169.    In the case where the intermediate ST agent is acting as the origin
  2170.    with respect to this target, see Section 4.6.3.1, the REFUSE message
  2171.    is only propagated upstream when there are no more downstream agents
  2172.    participating in the stream. In this case, the agent indicates that
  2173.    the agent is to be removed from the stream propagating the REFUSE
  2174.    message with the G-bit set (1).
  2175.  
  2176. 4.5.9  REFUSE Processing by the Origin
  2177.  
  2178.    When the REFUSE message reaches the origin, the ST agent at the
  2179.    origin sends an ACK and notifies the application that the target is
  2180.    no longer part of the stream and also if the stream has no remaining
  2181.    targets. If there are no remaining targets, the application may wish
  2182.    to terminate the stream, or keep the stream active to allow addition
  2183.  
  2184.  
  2185.  
  2186. Delgrossi & Berger, Editors   Experimental                     [Page 39]
  2187.  
  2188. RFC 1819              ST2+ Protocol Specification            August 1995
  2189.  
  2190.  
  2191.    of targets or stream joining as described in Section 4.6.3.
  2192.  
  2193. 4.5.10  Other Functions during Stream Setup
  2194.  
  2195.    Some other functions have to be accomplished by an ST agent as
  2196.    CONNECT messages travel downstream and ACCEPT (or REFUSE) messages
  2197.    travel upstream during the stream setup phase. They were not
  2198.    mentioned in the previous sections to keep the discussion as simple
  2199.    as possible. These functions include:
  2200.  
  2201.    o   computing the smallest Maximum Transmission Unit size over the path
  2202.        to the targets, as part of the MTU discovery mechanism presented in
  2203.        Section 8.6. This is done by updating the MaxMsgSize field of the
  2204.        CONNECT message, see Section 10.4.4. This value is carried back to
  2205.        origin in the MaxMsgSize field of the ACCEPT message, see Section
  2206.        10.4.1.
  2207.  
  2208.    o   counting the number of IP clouds to be traversed to reach the
  2209.        targets, if any. IP clouds are traversed when the IP encapsulation
  2210.        mechanism is used. This mechanism described in Section 8.7.
  2211.        Encapsulating agents update the IPHops field of the CONNECT message,
  2212.        see Section 10.4.4. The resulting value is carried back to origin in
  2213.        the IPHops field of the ACCEPT message, see Section 10.4.1.
  2214.  
  2215.    o   updating the RecoveryTimeout value for the stream based on what can
  2216.        the agent can support. This is part of the stream recovery
  2217.        mechanism, in Section 6.2. This is done by updating the
  2218.        RecoveryTimeout field of the CONNECT message, see Section 10.4.4.
  2219.        This value is carried back to origin in the RecoveryTimeout field of
  2220.        the ACCEPT message, see Section 10.4.1.
  2221.  
  2222. 4.6  Modifying an Existing Stream
  2223.  
  2224.    Some applications may wish to modify a stream after it has been
  2225.    created. Possible changes include expanding a stream, reducing it,
  2226.    and changing its FlowSpec. The origin may add or remove targets as
  2227.    described in Section 4.6.1 and Section 4.6.2. Targets may request to
  2228.    join the stream as described in Section 4.6.3 or, they may decide to
  2229.    leave a stream as described in Section 4.6.4. Section 4.6.5 explains
  2230.    how to change a stream's FlowSpec.
  2231.  
  2232.    As defined by Section 2, an ST agent can handle only one stream
  2233.    modification at a time. If a stream modification operation is already
  2234.    underway, further requests are queued and handled when the previous
  2235.    operation has been completed. This also applies to two subsequent
  2236.    requests of the same kind, e.g., two subsequent changes to the
  2237.    FlowSpec.
  2238.  
  2239.  
  2240.  
  2241.  
  2242. Delgrossi & Berger, Editors   Experimental                     [Page 40]
  2243.  
  2244. RFC 1819              ST2+ Protocol Specification            August 1995
  2245.  
  2246.  
  2247. 4.6.1  The Origin Adding New Targets
  2248.  
  2249.    It is possible for an application at the origin to add new targets to
  2250.    an existing stream any time after the stream has been established.
  2251.    Before new targets are added, the application has to collect the
  2252.    necessary information on the new targets. Such information is passed
  2253.    to the ST agent at the origin.
  2254.  
  2255.    The ST agent at the origin issues a CONNECT message that contains the
  2256.    SID, the FlowSpec, and the TargetList specifying the new targets.
  2257.    This is similar to sending a CONNECT message during stream
  2258.    establishment, with the following exceptions: the origin checks that
  2259.    a) the SID is valid, b) the targets are not already members of the
  2260.    stream, c) that the LRM evaluates the FlowSpec of the new target to
  2261.    be the same as the FlowSpec of the existing stream, i.e., it requires
  2262.    an equal or smaller amount of resources to be allocated. If the
  2263.    FlowSpec of the new target does not match the FlowSpec of the
  2264.    existing stream, an error is generated with ReasonCode
  2265.    (FlowSpecMismatch). Functions to compare flow specifications are
  2266.    provided by the LRM, see Section 1.4.5.
  2267.  
  2268.    An intermediate ST agent that is already a participant in the stream
  2269.    looks at the SID and StreamCreationTime, and verifies that the stream
  2270.    is the same. It then checks if the intersection of the TargetList and
  2271.    the targets of the established stream is empty. If this is not the
  2272.    case, it responds with a REFUSE message with ReasonCode
  2273.    (TargetExists) that contains a TargetList of those targets that were
  2274.    duplicates. To indicate that the stream exists, and includes the
  2275.    listed targets, the ST agent sets to one (1) the E-bit of the REFUSE
  2276.    message, see Section 10.4.11.  The agent then proceeds processing
  2277.    each new target in the TargetList.
  2278.  
  2279.    For each new target in the TargetList, processing is much the same as
  2280.    for the original CONNECT. The CONNECT is acknowledged, propagated,
  2281.    and network resources are reserved. Intermediate or target ST agents
  2282.    that are not already participants in the stream behave as in the case
  2283.    of stream setup (see Section 4.5.4 and Section 4.5.5).
  2284.  
  2285. 4.6.2  The Origin Removing a Target
  2286.  
  2287.    It is possible for an application at the origin to remove existing
  2288.    targets of a stream any time after the targets have accepted the
  2289.    stream. The application at the origin specifies the set of targets
  2290.    that are to be removed and informs the local ST agent. Based on this
  2291.    information, the ST agent sends DISCONNECT messages with the
  2292.    ReasonCode (ApplDisconnect) to the next-hops relative to the targets.
  2293.  
  2294.  
  2295.  
  2296.  
  2297.  
  2298. Delgrossi & Berger, Editors   Experimental                     [Page 41]
  2299.  
  2300. RFC 1819              ST2+ Protocol Specification            August 1995
  2301.  
  2302.  
  2303.    An ST agent that receives a DISCONNECT message must acknowledge it by
  2304.    sending an ACK to the previous-hop. The ST agent updates its state
  2305.    and notifies the LRM of the target deletion so that the LRM can
  2306.    modify reservations as appropriate. When the DISCONNECT message
  2307.    reaches the target, the ST agent also notifies the application that
  2308.    the target is no longer part of the stream. When there are no
  2309.    remaining targets that can be reached through a particular next-hop,
  2310.    the ST agent informs the LRM and it deletes the next-hop from its
  2311.    next-hops set.
  2312.  
  2313.    SCMP also provides a flooding mechanism to delete targets that joined
  2314.    the stream without notifying the origin. The special case of target
  2315.    deletion via flooding is described in Section 5.7.
  2316.  
  2317. 4.6.3  A Target Joining a Stream
  2318.  
  2319.    An application may request to join an existing stream. It has to
  2320.    collect information on the stream including the stream ID (SID) and
  2321.    the IP address of the stream's origin. This can be done out-of-band,
  2322.    e.g., via regular IP. The information is then passed to the local ST
  2323.    agent. The ST agent generates a JOIN message containing the
  2324.    application's request to join the stream and sends it toward the
  2325.    stream origin.
  2326.  
  2327.    An ST agent receiving a JOIN message, assuming no errors, responds
  2328.    with an ACK. The ACK message must identify the JOIN message to which
  2329.    it corresponds by including the Reference number indicated by the
  2330.    Reference field of the JOIN message. If the ST agent is not traversed
  2331.    by the stream that has to be joined, it propagates the JOIN message
  2332.    toward the stream's origin. Once a JOIN message has been
  2333.    acknowledged, ST agents do not retain any state information related
  2334.    to the JOIN message.
  2335.  
  2336.    Eventually, an ST agent traversed by the stream or the stream's
  2337.    origin itself is reached. This agent must respond to a received JOIN
  2338.    first with an ACK to the ST agent from which the message was
  2339.    received, then, it issues either a CONNECT or a JOIN-REJECT message
  2340.    and sends it toward the target. The response to the join request is
  2341.    based on the join authorization level associated with the stream, see
  2342.    Section 4.4.2:
  2343.  
  2344. o   If the stream has authorization level #0 (refuse join):
  2345.     The ST agent sends a JOIN-REJECT message toward the target with
  2346.     ReasonCode (JoinAuthFailure).
  2347.  
  2348. o   If the stream has authorization level #1 (ok, notify origin):
  2349.     The ST agent sends a CONNECT message toward the target with a
  2350.     TargetList including the target that requested to join the stream.
  2351.  
  2352.  
  2353.  
  2354. Delgrossi & Berger, Editors   Experimental                     [Page 42]
  2355.  
  2356. RFC 1819              ST2+ Protocol Specification            August 1995
  2357.  
  2358.  
  2359.     This eventually results in adding the target to the stream. When
  2360.     the ST agent receives the ACCEPT message indicating that the new
  2361.     target has been added, it does not propagate the ACCEPT message
  2362.     backwards (Section 4.5.6). Instead, it issues a NOTIFY message
  2363.     with ReasonCode (TargetJoined) so that upstream agents, including
  2364.     the origin, may add the new target to maintained state
  2365.     information. The NOTIFY message includes all target specific
  2366.     information.
  2367.  
  2368. o   If the stream has authorization level #2 (ok):
  2369.     The ST agent sends a CONNECT message toward the target with a
  2370.     TargetList including the target that requested to join the stream.
  2371.     This eventually results in adding the target to the stream. When
  2372.     the ST agent receives the ACCEPT message indicating that the new
  2373.     target has been added, it does not propagate the ACCEPT message
  2374.     backwards (Section 4.5.6), nor does it notify the origin. A NOTIFY
  2375.     message is generated with ReasonCode (TargetJoined) if the target
  2376.     specific information needs to be propagated back to the origin. An
  2377.     example of such information is change in MTU, see Section 8.6.
  2378.  
  2379. 4.6.3.1  Intermediate Agent (Router) as Origin
  2380.  
  2381.    When a stream has join authorization level #2, see Section 4.4.2, it
  2382.    is possible that the stream origin is unaware of some targets
  2383.    participating in the stream. In this case, the ST intermediate agent
  2384.    that first sent a CONNECT message to this target has to act as the
  2385.    stream origin for the given target. This includes:
  2386.  
  2387. o   if the whole stream is deleted, the intermediate agent must
  2388.     disconnect the target.
  2389.  
  2390. o   if the stream FlowSpec is changed, the intermediate agent must
  2391.     change the FlowSpec for the target as appropriate.
  2392.  
  2393. o   proper handling of ACCEPT and REFUSE messages, without propagation
  2394.     to upstream ST agents.
  2395.  
  2396. o   generation of NOTIFY messages when needed. (As described above.)
  2397.  
  2398.    The intermediate agent behaves normally for all other targets added
  2399.    to the stream as a consequence of a CONNECT message issued by the
  2400.    origin.
  2401.  
  2402. 4.6.4  A Target Deleting Itself
  2403.  
  2404.    The application at the target may inform the local ST agent that it
  2405.    wants to be removed from the stream. The ST agent then forms a REFUSE
  2406.    message with the target itself as the only entry in the TargetList
  2407.  
  2408.  
  2409.  
  2410. Delgrossi & Berger, Editors   Experimental                     [Page 43]
  2411.  
  2412. RFC 1819              ST2+ Protocol Specification            August 1995
  2413.  
  2414.  
  2415.    and with ReasonCode (ApplDisconnect). The REFUSE message is sent back
  2416.    to the origin via the previous-hop. If a stream has multiple targets
  2417.    and one target leaves the stream using this REFUSE mechanism, the
  2418.    stream to the other targets is not affected; the stream continues to
  2419.    exist.
  2420.  
  2421.    An ST agent that receives a REFUSE message acknowledges it by sending
  2422.    an ACK to the next-hop. The target is deleted and the LRM is notified
  2423.    so that it adjusts reservations as appropriate. The REFUSE message is
  2424.    also propagated back to the previous-hop ST agent except in the case
  2425.    where the agent is acting as the origin. In this case a NOTIFY may be
  2426.    propagated instead, see Section 4.6.3.
  2427.  
  2428.    When the REFUSE reaches the origin, the origin sends an ACK and
  2429.    notifies the application that the target is no longer part of the
  2430.    stream.
  2431.  
  2432. 4.6.5  Changing a Stream's FlowSpec
  2433.  
  2434.    The application at the origin may wish to change the FlowSpec of an
  2435.    established stream. Changing the FlowSpec is a critical operation and
  2436.    it may even lead in some cases to the deletion of the affected
  2437.    targets. Possible problems with FlowSpec changes are discussed in
  2438.    Section 5.6.
  2439.  
  2440.    To change the stream's FlowSpec, the application informs the ST agent
  2441.    at the origin of the new FlowSpec and of the list of targets relative
  2442.    to the change. The ST agent at the origin then issues one CHANGE
  2443.    message per next-hop including the new FlowSpec and sends it to the
  2444.    relevant next-hop ST agents. If the G-bit field of the CHANGE message
  2445.    is set (1), the change affects all targets in the stream.
  2446.  
  2447.    The CHANGE message contains a bit called I-bit, see Section 10.4.3.
  2448.    By default, the I-bit is set to zero (0) to indicate that the LRM is
  2449.    expected to try and perform the requested FlowSpec change without
  2450.    risking to tear down the stream. Applications that desire a higher
  2451.    probability of success and are willing to take the risk of breaking
  2452.    the stream can indicate this by setting the I-bit to one (1).
  2453.    Applications that require the requested modification in order to
  2454.    continue operating are expected to set this bit.
  2455.  
  2456.    An intermediate ST agent that receives a CHANGE message first sends
  2457.    an ACK to the previous-hop and then provides the FlowSpec to the LRM.
  2458.    If the LRM can perform the change, the ST agent propagates the CHANGE
  2459.    messages along the established paths.
  2460.  
  2461.  
  2462.  
  2463.  
  2464.  
  2465.  
  2466. Delgrossi & Berger, Editors   Experimental                     [Page 44]
  2467.  
  2468. RFC 1819              ST2+ Protocol Specification            August 1995
  2469.  
  2470.  
  2471.    If the whole process succeeds, the CHANGE messages will eventually
  2472.    reach the targets. Targets respond with an ACCEPT (or REFUSE) message
  2473.    that is propagated back to the origin. In processing the ACCEPT
  2474.    message on the way back to the origin, excess resources may be
  2475.    released by the LRM as described in Section 4.5.6. The REFUSE message
  2476.    must have the ReasonCode (ApplRefused).
  2477.  
  2478.    SCMP also provides a flooding mechanism to change targets that joined
  2479.    the stream without notifying the origin. The special case of target
  2480.    change via flooding is described in Section 5.7.
  2481.  
  2482. 4.7  Stream Tear Down
  2483.  
  2484.    A stream is usually terminated by the origin when it has no further
  2485.    data to send. A stream is also torn down if the application should
  2486.    terminate abnormally or if certain network failures are encountered.
  2487.    Processing in this case is identical to the previous descriptions
  2488.    except that the ReasonCode (ApplAbort, NetworkFailure, etc.) is
  2489.    different.
  2490.  
  2491.    When all targets have left a stream, the origin notifies the
  2492.    application of that fact, and the application is then responsible for
  2493.    terminating the stream. Note, however, that the application may
  2494.    decide to add targets to the stream instead of terminating it, or may
  2495.    just leave the stream open with no targets in order to permit stream
  2496.    joins.
  2497.  
  2498. 5.  Exceptional Cases
  2499.  
  2500.    The previous descriptions covered the simple cases where everything
  2501.    worked. We now discuss what happens when things do not succeed.
  2502.    Included are situations where messages exceed a network MTU, are
  2503.    lost, the requested resources are not available, the routing fails or
  2504.    is inconsistent.
  2505.  
  2506. 5.1  Long ST Messages
  2507.  
  2508.    It is possible that an ST agent, or an application, will need to send
  2509.    a message that exceeds a network's Maximum Transmission Unit (MTU).
  2510.    This case must be handled but not via generic fragmentation, since
  2511.    ST2 does not support generic fragmentation of either data or control
  2512.    messages.
  2513.  
  2514. 5.1.1  Handling of Long Data Packets
  2515.  
  2516.    ST agents discard data packets that exceed the MTU of the next-hop
  2517.    network. No error message is generated. Applications should avoid
  2518.    sending data packets larger than the minimum MTU supported by a given
  2519.  
  2520.  
  2521.  
  2522. Delgrossi & Berger, Editors   Experimental                     [Page 45]
  2523.  
  2524. RFC 1819              ST2+ Protocol Specification            August 1995
  2525.  
  2526.  
  2527.    stream. The application, both at the origin and targets, can learn
  2528.    the stream minimum MTU through the MTU discovery mechanism described
  2529.    in Section 8.6.
  2530.  
  2531. 5.1.2  Handling of Long Control Packets
  2532.  
  2533.    Each ST agent knows the MTU of the networks to which it is connected,
  2534.    and those MTUs restrict the size of the SCMP message it can send. An
  2535.    SCMP message size can exceed the MTU of a given network for a number
  2536.    of reasons:
  2537.  
  2538. o   the TargetList parameter (Section 10.3.6) may be too long;
  2539.  
  2540. o   the RecordRoute parameter (Section 10.3.5) may be too long.
  2541.  
  2542. o   the UserData parameter (Section 10.3.7) may be too long;
  2543.  
  2544. o   the PDUInError field of the ERROR message (Section 10.4.6) may be
  2545.     too long;
  2546.  
  2547.    An ST agent receiving or generating a too long SCMP message should:
  2548.  
  2549. o   break the message into multiple messages, each carrying part of the
  2550.     TargetList. Any RecordRoute and UserData parameters are replicated
  2551.     in each message for delivery to all targets. Applications that
  2552.     support a large number of targets may avoid using long TargetList
  2553.     parameters, and are expected to do so, by exploiting the stream
  2554.     joining functions, see Section 4.6.3. One exception to this rule
  2555.     exists. In the case of a long TargetList parameter to be included in
  2556.     a STATUS-RESPONSE message, the TargetList parameter is just
  2557.     truncated to the point where the list can fit in a single message,
  2558.     see Section 8.4.
  2559.  
  2560. o   for down stream agents: if the TargetList parameter contains a
  2561.     single Target element and the message size is still too long, the ST
  2562.     agent should issue a REFUSE message with ReasonCode
  2563.     (RecordRouteSize) if the size of the RecordRoute parameter causes
  2564.     the SCMP message size to exceed the network MTU, or with ReasonCode
  2565.     (UserDataSize) if the size of the UserData parameter causes the SCMP
  2566.     message size to exceed the network MTU. If both RecordRoute and
  2567.     UserData parameters are present the ReasonCode (UserDataSize) should
  2568.     be sent. For messages generated at the target: the target ST agent
  2569.     must check for SCMP messages that may exceed the MTU on the complete
  2570.     target-to-origin path, and inform the application that a too long
  2571.     SCMP messages has been generated. The format for the error reporting
  2572.     is a local implementation issue. The error codes are the same as
  2573.     previously stated.
  2574.  
  2575.  
  2576.  
  2577.  
  2578. Delgrossi & Berger, Editors   Experimental                     [Page 46]
  2579.  
  2580. RFC 1819              ST2+ Protocol Specification            August 1995
  2581.  
  2582.  
  2583.    ST agents generating too long ERROR messages, simply truncate the
  2584.    PDUInError field to the point where the message is smaller than the
  2585.    network MTU.
  2586.  
  2587. 5.2  Timeout Failures
  2588.  
  2589.    As described in Section 4.3, SCMP message delivery is made reliable
  2590.    through the use of acknowledgments, timeouts, and retransmission. The
  2591.    ACCEPT, CHANGE, CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY, and
  2592.    REFUSE messages must always be acknowledged, see Section 4.2. In
  2593.    addition, for some SCMP messages (CHANGE, CONNECT, JOIN) the sending
  2594.    ST agent also expects a response back (ACCEPT/REFUSE, CONNECT/JOIN-
  2595.    REJECT) after an ACK has been received. Also, the STATUS message must
  2596.    be answered with a STATUS-RESPONSE message.
  2597.  
  2598.    The following sections describe the handling of each of the possible
  2599.    failure cases due to timeout situations while waiting for an
  2600.    acknowledgment or a response. The timeout related variables, and
  2601.    their names, used in the next sections are for reference purposes
  2602.    only. They may be implementation specific. Different implementations
  2603.    are not required to share variable names, or even the mechanism by
  2604.    which the timeout and retransmission behavior is implemented.
  2605.  
  2606. 5.2.1  Failure due to ACCEPT Acknowledgment Timeout
  2607.  
  2608.    An ST agent that sends an ACCEPT message upstream expects an ACK from
  2609.    the previous-hop ST agent. If no ACK is received before the ToAccept
  2610.    timeout expires, the ST agent should retry and send the ACCEPT
  2611.    message again. After NAccept unsuccessful retries, the ST agent sends
  2612.    a REFUSE message toward the origin, and a DISCONNECT message toward
  2613.    the targets. Both REFUSE and DISCONNECT must identify the affected
  2614.    targets and specify the ReasonCode (RetransTimeout).
  2615.  
  2616. 5.2.2  Failure due to CHANGE Acknowledgment Timeout
  2617.  
  2618.    An ST agent that sends a CHANGE message downstream expects an ACK
  2619.    from the next-hop ST agent. If no ACK is received before the ToChange
  2620.    timeout expires, the ST agent should retry and send the CHANGE
  2621.    message again. After NChange unsuccessful retries, the ST agent
  2622.    aborts the change attempt by sending a REFUSE message toward the
  2623.    origin, and a DISCONNECT message toward the targets. Both REFUSE and
  2624.    DISCONNECT must identify the affected targets and specify the
  2625.    ReasonCode (RetransTimeout).
  2626.  
  2627.  
  2628.  
  2629.  
  2630.  
  2631.  
  2632.  
  2633.  
  2634. Delgrossi & Berger, Editors   Experimental                     [Page 47]
  2635.  
  2636. RFC 1819              ST2+ Protocol Specification            August 1995
  2637.  
  2638.  
  2639. 5.2.3  Failure due to CHANGE Response Timeout
  2640.  
  2641.    Only the origin ST agent implements this timeout. After correctly
  2642.    receiving the ACK to a CHANGE message, an ST agent expects to receive
  2643.    an ACCEPT, or REFUSE message in response. If one of these messages is
  2644.    not received before the ToChangeResp timer expires, the ST agent at
  2645.    the origin aborts the change attempt, and behaves as if a REFUSE
  2646.    message with the E-bit set and with ReasonCode (ResponseTimeout) is
  2647.    received.
  2648.  
  2649. 5.2.4  Failure due to CONNECT Acknowledgment Timeout
  2650.  
  2651.    An ST agent that sends a CONNECT message downstream expects an ACK
  2652.    from the next-hop ST agent. If no ACK is received before the
  2653.    ToConnect timeout expires, the ST agent should retry and send the
  2654.    CONNECT message again. After NConnect unsuccessful retries, the ST
  2655.    agent sends a REFUSE message toward the origin, and a DISCONNECT
  2656.    message toward the targets. Both REFUSE and DISCONNECT must identify
  2657.    the affected targets and specify the ReasonCode (RetransTimeout).
  2658.  
  2659. 5.2.5  Failure due to CONNECT Response Timeout
  2660.  
  2661.    Only the origin ST agent implements this timeout. After correctly
  2662.    receiving the ACK to a CONNECT message, an ST agent expects to
  2663.    receive an ACCEPT or REFUSE message in response. If one of these
  2664.    messages is not received before the ToConnectResp timer expires, the
  2665.    origin ST agent aborts the connection setup attempt, acts as if a
  2666.    REFUSE message is received, and it sends a DISCONNECT message toward
  2667.    the targets.  Both REFUSE and DISCONNECT must identify the affected
  2668.    targets and specify the ReasonCode (ResponseTimeout).
  2669.  
  2670. 5.2.6  Failure due to DISCONNECT Acknowledgment Timeout
  2671.  
  2672.    An ST agent that sends a DISCONNECT message downstream expects an ACK
  2673.    from the next-hop ST agent. If no ACK is received before the
  2674.    ToDisconnect timeout expires, the ST agent should retry and send the
  2675.    DISCONNECT message again. After NDisconnect unsuccessful retries, the
  2676.    ST agent simply gives up and it assumes the next-hop ST agent is not
  2677.    part in the stream any more.
  2678.  
  2679. 5.2.7  Failure due to JOIN Acknowledgment Timeout
  2680.  
  2681.    An ST agent that sends a JOIN message toward the origin expects an
  2682.    ACK from a neighbor ST agent. If no ACK is received before the ToJoin
  2683.    timeout expires, the ST agent should retry and send the JOIN message
  2684.    again. After NJoin unsuccessful retries, the ST agent sends a JOIN-
  2685.    REJECT message back in the direction of the target with ReasonCode
  2686.    (RetransTimeout).
  2687.  
  2688.  
  2689.  
  2690. Delgrossi & Berger, Editors   Experimental                     [Page 48]
  2691.  
  2692. RFC 1819              ST2+ Protocol Specification            August 1995
  2693.  
  2694.  
  2695. 5.2.8  Failure due to JOIN Response Timeout
  2696.  
  2697.    Only the target agent implements this timeout. After correctly
  2698.    receiving the ACK to a JOIN message, the ST agent at the target
  2699.    expects to receive a CONNECT or JOIN-REJECT message in response. If
  2700.    one of these message is not received before the ToJoinResp timer
  2701.    expires, the ST agent aborts the stream join attempt and returns an
  2702.    error corresponding with ReasonCode (RetransTimeout) to the
  2703.    application.
  2704.  
  2705.    Note that, after correctly receiving the ACK to a JOIN message,
  2706.    intermediate ST agents do not maintain any state on the stream
  2707.    joining attempt. As a consequence, they do not set the ToJoinResp
  2708.    timer and do not wait for a CONNECT or JOIN-REJECT message. This is
  2709.    described in Section 4.6.3.
  2710.  
  2711. 5.2.9  Failure due to JOIN-REJECT Acknowledgment Timeout
  2712.  
  2713.    An ST agent that sends a JOIN-REJECT message toward the target
  2714.    expects an ACK from a neighbor ST agent. If no ACK is received before
  2715.    the ToJoinReject timeout expires, the ST agent should retry and send
  2716.    the JOIN-REJECT message again. After NJoinReject unsuccessful
  2717.    retries, the ST agent simply gives up.
  2718.  
  2719. 5.2.10  Failure due to NOTIFY Acknowledgment Timeout
  2720.  
  2721.    An ST agent that sends a NOTIFY message to a neighbor ST agent
  2722.    expects an ACK from that neighbor ST agent. If no ACK is received
  2723.    before the ToNotify timeout expires, the ST agent should retry and
  2724.    send the NOTIFY message again. After NNotify unsuccessful retries,
  2725.    the ST agent simply gives up and behaves as if the ACK message was
  2726.    received.
  2727.  
  2728. 5.2.11  Failure due to REFUSE Acknowledgment Timeout
  2729.  
  2730.    An ST agent that sends a REFUSE message upstream expects an ACK from
  2731.    the previous-hop ST agent. If no ACK is received before the ToRefuse
  2732.    timeout expires, the ST agent should retry and send the REFUSE
  2733.    message again. After NRefuse unsuccessful retries, the ST agent gives
  2734.    up and it assumes it is not part in the stream any more.
  2735.  
  2736. 5.2.12  Failure due to STATUS Response Timeout
  2737.  
  2738.    After sending a STATUS message to a neighbor ST agent, an ST agent
  2739.    expects to receive a STATUS-RESPONSE message in response. If this
  2740.    message is not received before the ToStatusResp timer expires, the ST
  2741.    agent sends the STATUS message again. After NStatus unsuccessful
  2742.    retries, the ST agent gives up and assumes that the neighbor ST agent
  2743.  
  2744.  
  2745.  
  2746. Delgrossi & Berger, Editors   Experimental                     [Page 49]
  2747.  
  2748. RFC 1819              ST2+ Protocol Specification            August 1995
  2749.  
  2750.  
  2751.    is not active.
  2752.  
  2753. 5.3  Setup Failures due to Routing Failures
  2754.  
  2755.    It is possible for an ST agent to receive a CONNECT message that
  2756.    contains a known SID, but from an ST agent other than the previous-
  2757.    hop ST agent of the stream with that SID. This may be:
  2758.  
  2759.    1.  that two branches of the tree forming the stream have joined
  2760.        back together,
  2761.  
  2762.    2.  the result of an attempted recovery of a partially failed
  2763.        stream, or
  2764.  
  2765.    3.  a routing loop.
  2766.  
  2767.    The TargetList contained in the CONNECT is used to distinguish the
  2768.    different cases by comparing each newly received target with those of
  2769.    the previously existing stream:
  2770.  
  2771. o   if the IP address of the target(s) differ, it is case #1;
  2772.  
  2773. o   if the target matches a target in the existing stream, it may be
  2774.     case #2 or #3.
  2775.  
  2776.    Case #1 is handled in Section 5.3.1, while the other cases are
  2777.    handled in Section 5.3.2.
  2778.  
  2779. 5.3.1  Path Convergence
  2780.  
  2781.    It is possible for an ST agent to receive a CONNECT message that
  2782.    contains a known SID, but from an ST agent other than the previous-
  2783.    hop ST agent of the stream with that SID. This might be the result of
  2784.    two branches of the tree forming the stream have joined back
  2785.    together.  Detection of this case and other possible sources was
  2786.    discussed in Section 5.2.
  2787.  
  2788.    SCMP does not allow for streams which have converged paths, i.e.,
  2789.    streams are always tree-shaped and not graph-like. At the point of
  2790.    convergence, the ST agent which detects the condition generates a
  2791.    REFUSE message with ReasonCode (PathConvergence). Also, as a help to
  2792.    the upstream ST agent, the detecting agent places the IP address of
  2793.    one of the stream's connected targets in the ValidTargetIPAddress
  2794.    field of the REFUSE message. This IP address will be used by upstream
  2795.    ST agents to avoid splitting the stream.
  2796.  
  2797.    An upstream ST agent that receives the REFUSE with ReasonCode
  2798.    (PathConvergence) will check to see if the listed IP address is one
  2799.  
  2800.  
  2801.  
  2802. Delgrossi & Berger, Editors   Experimental                     [Page 50]
  2803.  
  2804. RFC 1819              ST2+ Protocol Specification            August 1995
  2805.  
  2806.  
  2807.    of the known stream targets. If it is not, the REFUSE is propagated
  2808.    to the previous-hop agent. If the listed IP address is known by the
  2809.    upstream ST agent, this ST agent is the ST agent that caused the
  2810.    split in the stream. (This agent may even be the origin.) This agent
  2811.    then avoids splitting the stream by using the next-hop of that known
  2812.    target as the next-hop for the refused targets. It sends a CONNECT
  2813.    with the affected targets to the existing valid next-hop.
  2814.  
  2815.    The above process will proceed, hop by hop, until the
  2816.    ValidTargetIPAddress matches the IP address of a known target. The
  2817.    only case where this process will fail is when the known target is
  2818.    deleted prior to the REFUSE propagating to the origin. In this case
  2819.    the origin can just reissue the CONNECT and start the whole process
  2820.    over again.
  2821.  
  2822. 5.3.2  Other Cases
  2823.  
  2824.    The remaining cases including a partially failed stream and a routing
  2825.    loop, are not easily distinguishable. In attempting recovery of a
  2826.    failed stream, an ST agent may issue new CONNECT messages to the
  2827.    affected targets. Such a CONNECT may reach an ST agent downstream of
  2828.    the failure before that ST agent has received a DISCONNECT from the
  2829.    neighborhood of the failure. Until that ST agent receives the
  2830.    DISCONNECT, it cannot distinguish between a failure recovery and an
  2831.    erroneous routing loop. That ST agent must therefore respond to the
  2832.    CONNECT with a REFUSE message with the affected targets specified in
  2833.    the TargetList and an appropriate ReasonCode (StreamExists).
  2834.  
  2835.    The ST agent immediately preceding that point, i.e., the latest ST
  2836.    agent to send the CONNECT message, will receive the REFUSE message.
  2837.    It must release any resources reserved exclusively for traffic to the
  2838.    listed targets. If this ST agent was not the one attempting the
  2839.    stream recovery, then it cannot distinguish between a failure
  2840.    recovery and an erroneous routing loop. It should repeat the CONNECT
  2841.    after a ToConnect timeout, see Section 5.2.4. If after NConnect
  2842.    retransmissions it continues to receive REFUSE messages, it should
  2843.    propagate the REFUSE message toward the origin, with the TargetList
  2844.    that specifies the affected targets, but with a different ReasonCode
  2845.    (RouteLoop).
  2846.  
  2847.    The REFUSE message with this ReasonCode (RouteLoop) is propagated by
  2848.    each ST agent without retransmitting any CONNECT messages. At each ST
  2849.    agent, it causes any resources reserved exclusively for the listed
  2850.    targets to be released. The REFUSE will be propagated to the origin
  2851.    in the case of an erroneous routing loop. In the case of stream
  2852.    recovery, it will be propagated to the ST agent that is attempting
  2853.    the recovery, which may be an intermediate ST agent or the origin
  2854.    itself. In the case of a stream recovery, the ST agent attempting the
  2855.  
  2856.  
  2857.  
  2858. Delgrossi & Berger, Editors   Experimental                     [Page 51]
  2859.  
  2860. RFC 1819              ST2+ Protocol Specification            August 1995
  2861.  
  2862.  
  2863.    recovery may issue new CONNECT messages to the same or to different
  2864.    next-hops.
  2865.  
  2866.    If an ST agent receives both a REFUSE message and a DISCONNECT
  2867.    message with a target in common then it can, for the each target in
  2868.    common, release the relevant resources and propagate neither the
  2869.    REFUSE nor the DISCONNECT.
  2870.  
  2871.    If the origin receives such a REFUSE message, it should attempt to
  2872.    send a new CONNECT to all the affected targets. Since routing errors
  2873.    in an internet are assumed to be temporary, the new CONNECTs will
  2874.    eventually find acceptable routes to the targets, if one exists. If
  2875.    no further routes exist after NRetryRoute tries, the application
  2876.    should be informed so that it may take whatever action it seems
  2877.    necessary.
  2878.  
  2879. 5.4  Problems due to Routing Inconsistency
  2880.  
  2881.    When an intermediate ST agent receives a CONNECT, it invokes the
  2882.    routing algorithm to select the next-hop ST agents based on the
  2883.    TargetList and the networks to which it is connected. If the
  2884.    resulting next-hop to any of the targets is across the same network
  2885.    from which it received the CONNECT (but not the previous-hop itself),
  2886.    there may be a routing problem. However, the routing algorithm at the
  2887.    previous- hop may be optimizing differently than the local algorithm
  2888.    would in the same situation. Since the local ST agent cannot
  2889.    distinguish the two cases, it should permit the setup but send back
  2890.    to the previous- hop ST agent an informative NOTIFY message with the
  2891.    appropriate ReasonCode (RouteBack), pertinent TargetList, and in the
  2892.    NextHopIPAddress element the address of the next-hop ST agent
  2893.    returned by its routing algorithm.
  2894.  
  2895.    The ST agent that receives such a NOTIFY should ACK it. If the ST
  2896.    agent is using an algorithm that would produce such behavior, no
  2897.    further action is taken; if not, the ST agent should send a
  2898.    DISCONNECT to the next-hop ST agent to correct the problem.
  2899.  
  2900.    Alternatively, if the next-hop returned by the routing function is in
  2901.    fact the previous-hop, a routing inconsistency has been detected. In
  2902.    this case, a REFUSE is sent back to the previous-hop ST agent
  2903.    containing an appropriate ReasonCode (RouteInconsist), pertinent
  2904.    TargetList, and in the NextHopIPAddress element the address of the
  2905.    previous-hop. When the previous-hop receives the REFUSE, it will
  2906.    recompute the next-hop for the affected targets. If there is a
  2907.    difference in the routing databases in the two ST agents, they may
  2908.    exchange CONNECT and REFUSE messages again. Since such routing errors
  2909.    in the internet are assumed to be temporary, the situation should
  2910.    eventually stabilize.
  2911.  
  2912.  
  2913.  
  2914. Delgrossi & Berger, Editors   Experimental                     [Page 52]
  2915.  
  2916. RFC 1819              ST2+ Protocol Specification            August 1995
  2917.  
  2918.  
  2919. 5.5  Problems in Reserving Resources
  2920.  
  2921.    As mentioned in Section 1.4.5, resource reservation is handled by the
  2922.    LRM. The LRM may not be able to satisfy a particular request during
  2923.    stream setup or modification for a number of reasons, including a
  2924.    mismatched FlowSpec, an unknown FlowSpec version, an error in
  2925.    processing a FlowSpec, and an inability to allocate the requested
  2926.    resource. This section discusses these cases and specifies the
  2927.    ReasonCodes that should be used when these error cases are
  2928.    encountered.
  2929.  
  2930. 5.5.1  Mismatched FlowSpecs
  2931.  
  2932.    In some cases the LRM may require a requested FlowSpec to match an
  2933.    existing FlowSpec, e.g., when adding new targets to an existing
  2934.    stream, see Section 4.6.1. In case of FlowSpec mismatch the LRM
  2935.    notifies the processing ST agent which should respond with ReasonCode
  2936.    (FlowSpecMismatch).
  2937.  
  2938. 5.5.2  Unknown FlowSpec Version
  2939.  
  2940.    When the LRM is invoked, it is passed information including the
  2941.    version of the FlowSpec, see Section 4.5.2.2. If this version is not
  2942.    known by the LRM, the LRM notifies the ST agent. The ST agent should
  2943.    respond with a REFUSE message with ReasonCode (FlowVerUnknown).
  2944.  
  2945. 5.5.3  LRM Unable to Process FlowSpec
  2946.  
  2947.    The LRM may encounter an LRM or FlowSpec specific error while
  2948.    attempting to satisfy a request. An example of such an error is given
  2949.    in Section 9.2.1. These errors are implementation specific and will
  2950.    not be enumerated with ST ReasonCodes. They are covered by a single,
  2951.    generic ReasonCode. When an LRM encounters such an error, it should
  2952.    notify the ST agent which should respond with the generic ReasonCode
  2953.    (FlowSpecError).
  2954.  
  2955. 5.5.4  Insufficient Resources
  2956.  
  2957.    If the LRM cannot make the necessary reservations because sufficient
  2958.    resources are not available, an ST agent may:
  2959.  
  2960. o   try alternative paths to the targets: the ST agent calls the routing
  2961.     function to find a different path to the targets. If an alternative
  2962.     path is found, stream connection setup continues in the usual way,
  2963.     as described in Section 4.5.
  2964.  
  2965.  
  2966.  
  2967.  
  2968.  
  2969.  
  2970. Delgrossi & Berger, Editors   Experimental                     [Page 53]
  2971.  
  2972. RFC 1819              ST2+ Protocol Specification            August 1995
  2973.  
  2974.  
  2975. o   refuse to establish the stream along this path: the origin ST agent
  2976.     informs the application of the stream setup failure; intermediate
  2977.     and target ST agents issue a REFUSE message (as described in Section
  2978.     4.5.8) with ReasonCode (CantGetResrc).
  2979.  
  2980.    It depends on the local implementations whether an ST agent tries
  2981.    alternative paths or refuses to establish the stream. In any case, if
  2982.    enough resources cannot be found over different paths, the ST agent
  2983.    has to explicitly refuse to establish the stream.
  2984.  
  2985. 5.6  Problems Caused by CHANGE Messages
  2986.  
  2987.    A CHANGE might fail for several reasons, including:
  2988.  
  2989. o   insufficient resources: the request may be for a larger amount of
  2990.     network resources when those resources are not available, ReasonCode
  2991.     (CantGetResrc);
  2992.  
  2993. o   a target application not agreeing to the change, ReasonCode
  2994.     (ApplRefused);
  2995.  
  2996.    The affected stream can be left in one of two states as a result of
  2997.    change failures: a) the stream can revert back to the state it was in
  2998.    prior to the CHANGE message being processed, or b) the stream may be
  2999.    torn down.
  3000.  
  3001.    The expected common case of failure will be when the requested change
  3002.    cannot be satisfied, but the pre-change resources remain allocated
  3003.    and available for use by the stream. In this case, the ST agent at
  3004.    the point where the failure occurred must inform upstream ST agents
  3005.    of the failure. (In the case where this ST agent is the target, there
  3006.    may not actually be a failure, the application may merely have not
  3007.    agreed to the change). The ST agent informs upstream ST agents by
  3008.    sending a REFUSE message with ReasonCode (CantGetResrc or
  3009.    ApplRefused). To indicate that the pre-change FlowSpec is still
  3010.    available and that the stream still exists, the ST agent sets the E-
  3011.    bit of the REFUSE message to one (1), see Section 10.4.11. Upstream
  3012.    ST agents receiving the REFUSE message inform the LRM so that it can
  3013.    attempt to revert back to the pre-change FlowSpec. It is permissible,
  3014.    but not desirable, for excess resources to remain allocated.
  3015.  
  3016.    For the case when the attempt to change the stream results in the
  3017.    loss of previously reserved resources, the stream is torn down. This
  3018.    can happen, for instance, when the I-bit is set (Section 4.6.5) and
  3019.    the LRM releases pre-change stream resources before the new ones are
  3020.    reserved, and neither new nor former resources are available. In this
  3021.    case, the ST agent where the failure occurs must inform other ST
  3022.    agents of the break in the affected portion of the stream. This is
  3023.  
  3024.  
  3025.  
  3026. Delgrossi & Berger, Editors   Experimental                     [Page 54]
  3027.  
  3028. RFC 1819              ST2+ Protocol Specification            August 1995
  3029.  
  3030.  
  3031.    done by the ST agent by sending a REFUSE message upstream and a
  3032.    DISCONNECT message downstream, both with the ReasonCode
  3033.    (CantGetResrc). To indicate that pre-change stream resources have
  3034.    been lost, the E-bit of the REFUSE message is set to zero (0).
  3035.  
  3036.    Note that a failure to change the resources requested for specific
  3037.    targets should not cause other targets in the stream to be deleted.
  3038.  
  3039. 5.7  Unknown Targets in DISCONNECT and CHANGE
  3040.  
  3041.    The handling of unknown targets listed in a DISCONNECT or CHANGE
  3042.    message is dependent on a stream's join authorization level, see
  3043.    Section 4.4.2. For streams with join authorization levels #0 and #1,
  3044.    see Section 4.4.2, all targets must be known. In this case, when
  3045.    processing a CHANGE message, the agent should generate a REFUSE
  3046.    message with ReasonCode (TargetUnknown). When processing a DISCONNECT
  3047.    message, it is possible that the DISCONNECT is a duplicate of an old
  3048.    request so the agent should respond as if it has successfully
  3049.    disconnected the target. That is, it should respond with an ACK
  3050.    message.
  3051.  
  3052.    For streams with join authorization level #2, it is possible that the
  3053.    origin is not aware of some targets that participate in the stream.
  3054.    The origin may delete or change these targets via the following
  3055.    flooding mechanism.
  3056.  
  3057.    If no next-hop ST agent can be associated with a target, the CHANGE/
  3058.    DISCONNECT message including the target is replicated to all known
  3059.    next-hop ST agents. This has the effect of propagating the CHANGE/
  3060.    DISCONNECT message to all downstream ST agents. Eventually, the ST
  3061.    agent that acts as the origin for the target (Section 4.6.3.1) is
  3062.    reached and the target is deleted.
  3063.  
  3064.    Target deletion/change via flooding is not expected to be the normal
  3065.    case. It is included to present the applications with uniform
  3066.    capabilities for all stream types. Flooding only applies to streams
  3067.    with join authorization level #2.
  3068.  
  3069. 6.  Failure Detection and Recovery
  3070.  
  3071. 6.1  Failure Detection
  3072.  
  3073.    The SCMP failure detection mechanism is based on two assumptions:
  3074.  
  3075. 1.  If a neighbor of an ST agent is up, and has been up without a
  3076.     disruption, and has not notified the ST agent of a problem with
  3077.     streams that pass through both, then the ST agent can assume that
  3078.     there has not been any problem with those streams.
  3079.  
  3080.  
  3081.  
  3082. Delgrossi & Berger, Editors   Experimental                     [Page 55]
  3083.  
  3084. RFC 1819              ST2+ Protocol Specification            August 1995
  3085.  
  3086.  
  3087. 2.  A network through which an ST agent has routed a stream will notify
  3088.     the ST agent if there is a problem that affects the stream data
  3089.     packets but does not affect the control packets.
  3090.  
  3091.    The purpose of the robustness protocol defined here is for ST agents
  3092.    to determine that the streams through a neighbor have been broken by
  3093.    the failure of the neighbor or the intervening network. This protocol
  3094.    should detect the overwhelming majority of failures that can occur.
  3095.    Once a failure is detected, the recovery procedures described in
  3096.    Section 6.2 are initiated by the ST agents.
  3097.  
  3098. 6.1.1  Network Failures
  3099.  
  3100.    An ST agent can detect network failures by two mechanisms:
  3101.  
  3102.    o   the network can report a failure, or
  3103.  
  3104.    o   the ST agent can discover a failure by itself.
  3105.  
  3106.    They differ in the amount of information that an ST agent has
  3107.    available to it in order to make a recovery decision. For example, a
  3108.    network may be able to report that reserved bandwidth has been lost
  3109.    and the reason for the loss and may also report that connectivity to
  3110.    the neighboring ST agent remains intact. On the other hand, an ST
  3111.    agent may discover that communication with a neighboring ST agent has
  3112.    ceased because it has not received any traffic from that neighbor in
  3113.    some time period. If an ST agent detects a failure, it may not be
  3114.    able to determine if the failure was in the network while the
  3115.    neighbor remains available, or the neighbor has failed while the
  3116.    network remains intact.
  3117.  
  3118. 6.1.2  Detecting ST Agents Failures
  3119.  
  3120.    Each ST agent periodically sends each neighbor with which it shares
  3121.    one or more streams a HELLO message. This message exchange is between
  3122.    ST agents, not entities representing streams or applications. That
  3123.    is, an ST agent need only send a single HELLO message to a neighbor
  3124.    regardless of the number of streams that flow between them. All ST
  3125.    agents (host as well as intermediate) must participate in this
  3126.    exchange. However, only ST agents that share active streams can
  3127.    participate in this exchange and it is an error to send a HELLO
  3128.    message to a neighbor ST agent with no streams in common, e.g., to
  3129.    check whether it is active. STATUS messages can be used to poll the
  3130.    status of neighbor ST agents, see Section 8.4.
  3131.  
  3132.    For the purpose of HELLO message exchange, stream existence is
  3133.    bounded by ACCEPT and DISCONNECT/REFUSE processing and is defined for
  3134.    both the upstream and downstream case. A stream to a previous-hop is
  3135.  
  3136.  
  3137.  
  3138. Delgrossi & Berger, Editors   Experimental                     [Page 56]
  3139.  
  3140. RFC 1819              ST2+ Protocol Specification            August 1995
  3141.  
  3142.  
  3143.    defined to start once an ACCEPT message has been forwarded upstream.
  3144.    A stream to a next-hop is defined to start once the received ACCEPT
  3145.    message has been acknowledged. A stream is defined to terminate once
  3146.    an acknowledgment is sent for a received DISCONNECT or REFUSE
  3147.    message, and an acknowledgment for a sent DISCONNECT or REFUSE
  3148.    message has been received.
  3149.  
  3150.    The HELLO message has two fields:
  3151.  
  3152.    o   a HelloTimer field that is in units of milliseconds modulo the
  3153.        maximum for the field size, and
  3154.  
  3155.    o   a Restarted-bit specifying that the ST agent has been restarted
  3156.        recently.
  3157.  
  3158.    The HelloTimer must appear to be incremented every millisecond
  3159.    whether a HELLO message is sent or not. The HelloTimer wraps around
  3160.    to zero after reaching the maximum value. Whenever an ST agent
  3161.    suffers a catastrophic event that may result in it losing ST state
  3162.    information, it must reset its HelloTimer to zero and must set the
  3163.    Restarted-bit in all HELLO messages sent in the following
  3164.    HelloTimerHoldDown seconds.
  3165.  
  3166.    If an ST agent receives a HELLO message that contains the Restarted-
  3167.    bit set, it must assume that the sending ST agent has lost its state.
  3168.    If it shares streams with that neighbor, it must initiate stream
  3169.    recovery activity, see Section 6.2. If it does not share streams with
  3170.    that neighbor, it should not attempt to create one until that bit is
  3171.    no longer set. If an ST agent receives a CONNECT message from a
  3172.    neighbor whose Restarted-bit is still set, the agent must respond
  3173.    with an ERROR message with the appropriate ReasonCode
  3174.    (RestartRemote). If an agent receives a CONNECT message while the
  3175.    agent's own Restarted- bit is set, the agent must respond with an
  3176.    ERROR message with the appropriate ReasonCode (RestartLocal).
  3177.  
  3178.    Each ST stream has an associated RecoveryTimeout value. This value is
  3179.    assigned by the origin and carried in the CONNECT message, see
  3180.    Section 4.5.10. Each agent checks to see if it can support the
  3181.    requested value. If it can not, it updates the value to the smallest
  3182.    timeout interval it can support. The RecoveryTimeout used by a
  3183.    particular stream is obtained from the ACCEPT message, see Section
  3184.    4.5.10, and is the smallest value seen across all ACCEPT messages
  3185.    from participating targets.
  3186.  
  3187.    An ST agent must send HELLO messages to its neighbor with a period
  3188.    shorter than the smallest RecoveryTimeout of all the active streams
  3189.    that pass between the two ST agents, regardless of direction. This
  3190.    period must be smaller by a factor, called HelloLossFactor, which is
  3191.  
  3192.  
  3193.  
  3194. Delgrossi & Berger, Editors   Experimental                     [Page 57]
  3195.  
  3196. RFC 1819              ST2+ Protocol Specification            August 1995
  3197.  
  3198.  
  3199.    at least as large as the greatest number of consecutive HELLO
  3200.    messages that could credibly be lost while the communication between
  3201.    the two ST agents is still viable.
  3202.  
  3203.    An ST agent may send simultaneous HELLO messages to all its neighbors
  3204.    at the rate necessary to support the smallest RecoveryTimeout of any
  3205.    active stream. Alternately, it may send HELLO messages to different
  3206.    neighbors independently at different rates corresponding to
  3207.    RecoveryTimeouts of individual streams.
  3208.  
  3209.    An ST agent must expect to receive at least one new HELLO message
  3210.    from each neighbor at least as frequently as the smallest
  3211.    RecoveryTimeout of any active stream in common with that neighbor.
  3212.    The agent can detect duplicate or delayed HELLO messages by comparing
  3213.    the HelloTimer field of the most recent valid HELLO message from that
  3214.    neighbor with the HelloTimer field of an incoming HELLO message.
  3215.    Valid incoming HELLO messages will have a HelloTimer field that is
  3216.    greater than the field contained in the previously received valid
  3217.    HELLO message by the time elapsed since the previous message was
  3218.    received. Actual evaluation of the elapsed time interval should take
  3219.    into account the maximum likely delay variance from that neighbor.
  3220.  
  3221.    If the ST agent does not receive a valid HELLO message within the
  3222.    RecoveryTimeout period of a stream, it must assume that the
  3223.    neighboring ST agent or the communication link between the two has
  3224.    failed and it must initiate stream recovery activity, as described
  3225.    below in Section 6.2.
  3226.  
  3227. 6.2  Failure Recovery
  3228.  
  3229.    If an intermediate ST agent fails or a network or part of a network
  3230.    fails, the previous-hop ST agent and the various next-hop ST agents
  3231.    will discover the fact by the failure detection mechanism described
  3232.    in Section 6.1.
  3233.  
  3234.    The recovery of an ST stream is a relatively complex and time
  3235.    consuming effort because it is designed in a general manner to
  3236.    operate across a large number of networks with diverse
  3237.    characteristics.  Therefore, it may require information to be
  3238.    distributed widely, and may require relatively long timers. On the
  3239.    other hand, since a network is typically a homogeneous system,
  3240.    failure recovery in the network may be a relatively faster and
  3241.    simpler operation. Therefore an ST agent that detects a failure
  3242.    should attempt to fix the network failure before attempting recovery
  3243.    of the ST stream. If the stream that existed between two ST agents
  3244.    before the failure cannot be reconstructed by network recovery
  3245.    mechanisms alone, then the ST stream recovery mechanism must be
  3246.    invoked.
  3247.  
  3248.  
  3249.  
  3250. Delgrossi & Berger, Editors   Experimental                     [Page 58]
  3251.  
  3252. RFC 1819              ST2+ Protocol Specification            August 1995
  3253.  
  3254.  
  3255.    If stream recovery is necessary, the different ST agents will need to
  3256.    perform different functions, depending on their relation to the
  3257.    failure:
  3258.  
  3259. o   An ST agent that is a next-hop from a failure should first verify
  3260.     that there was a failure. It can do this using STATUS messages to
  3261.     query its upstream neighbor. If it cannot communicate with that
  3262.     neighbor, then for each active stream from that neighbor it should
  3263.     first send a REFUSE message upstream with the appropriate ReasonCode
  3264.     (STAgentFailure). This is done to the neighbor to speed up the
  3265.     failure recovery in case the hop is unidirectional, i.e., the
  3266.     neighbor can hear the ST agent but the ST agent cannot hear the
  3267.     neighbor. The ST agent detecting the failure must then, for each
  3268.     active stream from that neighbor, send DISCONNECT messages with the
  3269.     same ReasonCode toward the targets. All downstream ST agents process
  3270.     this DISCONNECT message just like the DISCONNECT that tears down the
  3271.     stream. If recovery is successful, targets will receive new CONNECT
  3272.     messages.
  3273.  
  3274. o   An ST agent that is the previous-hop before the failed component
  3275.     first verifies that there was a failure by querying the downstream
  3276.     neighbor using STATUS messages. If the neighbor has lost its state
  3277.     but is available, then the ST agent may try and reconstruct
  3278.     (explained below) the affected streams, for those streams that do
  3279.     not have the NoRecovery option selected. If it cannot communicate
  3280.     with the next-hop, then the ST agent detecting the failure sends a
  3281.     DISCONNECT message, for each affected stream, with the appropriate
  3282.     ReasonCode (STAgentFailure) toward the affected targets. It does so
  3283.     to speed up failure recovery in case the communication may be
  3284.     unidirectional and this message might be delivered successfully.
  3285.  
  3286.    Based on the NoRecovery option, the ST agent that is the previous-hop
  3287.    before the failed component takes the following actions:
  3288.  
  3289. o   If the NoRecovery option is selected, then the ST agent sends, per
  3290.     affected stream, a REFUSE message with the appropriate ReasonCode
  3291.     (STAgentFailure) to the previous-hop. The TargetList in these
  3292.     messages contains all the targets that were reached through the
  3293.     broken branch. As discussed in Section 5.1.2, multiple REFUSE
  3294.     messages may be required if the PDU is too long for the MTU of the
  3295.     intervening network. The REFUSE message is propagated all the way to
  3296.     the origin. The application at the origin can attempt recovery of
  3297.     the stream by sending a new CONNECT to the affected targets. For
  3298.     established streams, the new CONNECT will be treated by intermediate
  3299.     ST agents as an addition of new targets into the established stream.
  3300.  
  3301.  
  3302.  
  3303.  
  3304.  
  3305.  
  3306. Delgrossi & Berger, Editors   Experimental                     [Page 59]
  3307.  
  3308. RFC 1819              ST2+ Protocol Specification            August 1995
  3309.  
  3310.  
  3311. o   If the NoRecovery option is not selected, the ST agent can attempt
  3312.     recovery of the affected streams. It does so one a stream by stream
  3313.     basis by issuing a new CONNECT message to the affected targets. If
  3314.     the ST agent cannot find new routes to some targets, or if the only
  3315.     route to some targets is through the previous-hop, then it sends one
  3316.     or more REFUSE messages to the previous-hop with the appropriate
  3317.     ReasonCode (CantRecover) specifying the affected targets in the
  3318.     TargetList. The previous-hop can then attempt recovery of the stream
  3319.     by issuing a CONNECT to those targets. If it cannot find an
  3320.     appropriate route, it will propagate the REFUSE message toward the
  3321.     origin.
  3322.  
  3323.    Regardless of which ST agent attempts recovery of a damaged stream,
  3324.    it will issue one or more CONNECT messages to the affected targets.
  3325.    These CONNECT messages are treated by intermediate ST agents as
  3326.    additions of new targets into the established stream. The FlowSpecs
  3327.    of the new CONNECT messages are the same as the ones contained in the
  3328.    most recent CONNECT or CHANGE messages that the ST agent had sent
  3329.    toward the affected targets when the stream was operational.
  3330.  
  3331.    Upon receiving an ACCEPT during the a stream recovery, the agent
  3332.    reconstructing the stream must ensure that the FlowSpec and other
  3333.    stream attributes (e.g., MaxMsgSize and RecoveryTimeout) of the re-
  3334.    established stream are equal to, or are less restrictive, than the
  3335.    pre-failure stream. If they are more restrictive, the recovery
  3336.    attempt must be aborted. If they are equal, or are less restrictive,
  3337.    then the recovery attempt is successful. When the attempt is a
  3338.    success, failure recovery related ACCEPTs are not forwarded upstream
  3339.    by the recovering agent.
  3340.  
  3341.    Any ST agent that decides that enough recovery attempts have been
  3342.    made, or that recovery attempts have no chance of succeeding, may
  3343.    indicate that no further attempts at recovery should be made. This is
  3344.    done by setting the N-bit in the REFUSE message, see Section 10.4.11.
  3345.    This bit must be set by agents, including the target, that know that
  3346.    there is no chance of recovery succeeding. An ST agent that receives
  3347.    a REFUSE message with the N-bit set (1) will not attempt recovery,
  3348.    regardless of the NoRecovery option, and it will set the N-bit when
  3349.    propagating the REFUSE message upstream.
  3350.  
  3351. 6.2.1  Problems in Stream Recovery
  3352.  
  3353.    The reconstruction of a broken stream may not proceed smoothly. Since
  3354.    there may be some delay while the information concerning the failure
  3355.    is propagated throughout an internet, routing errors may occur for
  3356.    some time after a failure. As a result, the ST agent attempting the
  3357.    recovery may receive ERROR messages for the new CONNECTs that are
  3358.    caused by internet routing errors. The ST agent attempting the
  3359.  
  3360.  
  3361.  
  3362. Delgrossi & Berger, Editors   Experimental                     [Page 60]
  3363.  
  3364. RFC 1819              ST2+ Protocol Specification            August 1995
  3365.  
  3366.  
  3367.    recovery should be prepared to resend CONNECTs before it succeeds in
  3368.    reconstructing the stream. If the failure partitions the internet and
  3369.    a new set of routes cannot be found to the targets, the REFUSE
  3370.    messages will eventually be propagated to the origin, which can then
  3371.    inform the application so it can decide whether to terminate or to
  3372.    continue to attempt recovery of the stream.
  3373.  
  3374.    The new CONNECT may at some point reach an ST agent downstream of the
  3375.    failure before the DISCONNECT does. In this case, the ST agent that
  3376.    receives the CONNECT is not yet aware that the stream has suffered a
  3377.    failure, and will interpret the new CONNECT as resulting from a
  3378.    routing failure. It will respond with an ERROR message with the
  3379.    appropriate ReasonCode (StreamExists). Since the timeout that the ST
  3380.    agents immediately preceding the failure and immediately following
  3381.    the failure are approximately the same, it is very likely that the
  3382.    remnants of the broken stream will soon be torn down by a DISCONNECT
  3383.    message. Therefore, the ST agent that receives the ERROR message with
  3384.    ReasonCode (StreamExists) should retransmit the CONNECT message after
  3385.    the ToConnect timeout expires. If this fails again, the request will
  3386.    be retried for NConnect times. Only if it still fails will the ST
  3387.    agent send a REFUSE message with the appropriate ReasonCode
  3388.    (RouteLoop) to its previous-hop. This message will be propagated back
  3389.    to the ST agent that is attempting recovery of the damaged stream.
  3390.    That ST agent can issue a new CONNECT message if it so chooses. The
  3391.    REFUSE is matched to a CONNECT message created by a recovery
  3392.    operation through the LnkReference field in the CONNECT.
  3393.  
  3394.    ST agents that have propagated a CONNECT message and have received a
  3395.    REFUSE message should maintain this information for some period of
  3396.    time. If an ST agent receives a second CONNECT message for a target
  3397.    that recently resulted in a REFUSE, that ST agent may respond with a
  3398.    REFUSE immediately rather than attempting to propagate the CONNECT.
  3399.    This has the effect of pruning the tree that is formed by the
  3400.    propagation of CONNECT messages to a target that is not reachable by
  3401.    the routes that are selected first. The tree will pass through any
  3402.    given ST agent only once, and the stream setup phase will be
  3403.    completed faster.
  3404.  
  3405.    If a CONNECT message reaches a target, the target should as
  3406.    efficiently as possible use the state that it has saved from before
  3407.    the stream failed during recovery of the stream. It will then issue
  3408.    an ACCEPT message toward the origin. The ACCEPT message will be
  3409.    intercepted by the ST agent that is attempting recovery of the
  3410.    damaged stream, if not the origin. If the FlowSpec contained in the
  3411.    ACCEPT specifies the same selection of parameters as were in effect
  3412.    before the failure, then the ST agent that is attempting recovery
  3413.    will not propagate the ACCEPT. FlowSpec comparison is done by the
  3414.    LRM. If the selections of the parameters are different, then the ST
  3415.  
  3416.  
  3417.  
  3418. Delgrossi & Berger, Editors   Experimental                     [Page 61]
  3419.  
  3420. RFC 1819              ST2+ Protocol Specification            August 1995
  3421.  
  3422.  
  3423.    agent that is attempting recovery will send the origin a NOTIFY
  3424.    message with the appropriate ReasonCode (FailureRecovery) that
  3425.    contains a FlowSpec that specifies the new parameter values. The
  3426.    origin may then have to change its data generation characteristics
  3427.    and the stream's parameters with a CHANGE message to use the newly
  3428.    recovered subtree.
  3429.  
  3430. 6.3  Stream Preemption
  3431.  
  3432.    As mentioned in Section 1.4.5, it is possible that the LRM decides to
  3433.    break a stream intentionally. This is called stream preemption.
  3434.    Streams are expected to be preempted in order to free resources for a
  3435.    new stream which has a higher priority.
  3436.  
  3437.    If the LRM decides that it is necessary to preempt one or more of the
  3438.    stream traversing it, the decision on which streams have to be
  3439.    preempted has to be made. There are two ways for an application to
  3440.    influence such decision:
  3441.  
  3442.    1.  based on FlowSpec information. For instance, with the ST2+
  3443.        FlowSpec, streams can be assigned a precedence value from 0
  3444.        (least important) to 256 (most important). This value is
  3445.        carried in the FlowSpec when the stream is setup, see Section
  3446.        9.2, so that the LRM is informed about it.
  3447.  
  3448.    2.  with the group mechanism. An application may specify that a set
  3449.        of streams are related to each other and that they are all
  3450.        candidate for preemption if one of them gets preempted. It can
  3451.        be done by using the fate-sharing relationship defined in
  3452.        Section 7.1.2. This helps the LRM making a good choice when
  3453.        more than one stream have to be preempted, because it leads to
  3454.        breaking a single application as opposed to as many
  3455.        applications as the number of preempted streams.
  3456.  
  3457.    If the LRM preempts a stream, it must notify the local ST agent. The
  3458.    following actions are performed by the ST agent:
  3459.  
  3460. o   The ST agent at the host where the stream was preempted sends
  3461.     DISCONNECT messages with the appropriate ReasonCode
  3462.     (StreamPreempted) toward the affected targets. It sends a REFUSE
  3463.     message with the appropriate ReasonCode (StreamPreempted) to the
  3464.     previous-hop.
  3465.  
  3466. o   A previous-hop ST agent of the preempted stream acts as in case of
  3467.     failure recovery, see Section 6.2.
  3468.  
  3469. o   A next-hop ST agent of the preempted stream acts as in case of
  3470.     failure recovery, see Section 6.2.
  3471.  
  3472.  
  3473.  
  3474. Delgrossi & Berger, Editors   Experimental                     [Page 62]
  3475.  
  3476. RFC 1819              ST2+ Protocol Specification            August 1995
  3477.  
  3478.  
  3479.    Note that, as opposite to failure recovery, there is no need to
  3480.    verify that the failure actually occurred, because this is explicitly
  3481.    indicated by the ReasonCode (StreamPreempted).
  3482.  
  3483. 7.  A Group of Streams
  3484.  
  3485.    There may be need to associate related streams. The group mechanism
  3486.    is simply an association technique that allows ST agents to identify
  3487.    the different streams that are to be associated.
  3488.  
  3489.    A group consists of a set of streams and a relationship. The set of
  3490.    streams may be empty. The relationship applies to all group members.
  3491.    Each group is identified by a group name. The group name must be
  3492.    globally unique.
  3493.  
  3494.    Streams belong to the same group if they have the same GroupName in
  3495.    the GroupName field of the Group parameter, see Section 10.3.2. The
  3496.    relationship is defined by the Relationship field. Group membership
  3497.    must be specified at stream creation time and persists for the whole
  3498.    stream lifetime. A single stream may belong to multiple groups.
  3499.  
  3500.    The ST agent that creates a new group is called group initiator. Any
  3501.    ST agent can be a group initiator. The initiator allocates the
  3502.    GroupName and the Relationship among group members. The initiator may
  3503.    or may not be the origin of a stream belonging to the group.
  3504.    GroupName generation is described in Section 8.2.
  3505.  
  3506. 7.1  Basic Group Relationships
  3507.  
  3508.    This version of ST defines four basic group relationships. An ST2+
  3509.    implementation must support all four basic relationships. Adherence
  3510.    to specified relationships are usually best effort. The basic
  3511.    relationships are described in detail below in Section 7.1.1 -
  3512.    Section 7.1.4.
  3513.  
  3514. 7.1.1  Bandwidth Sharing
  3515.  
  3516.    Streams associated with the same group share the same network
  3517.    bandwidth. The intent is to support applications such as audio
  3518.    conferences where, of all participants, only some are allowed to
  3519.    speak at one time. In such a scenario, global bandwidth utilization
  3520.    can be lowered by allocating only those resources that can be used at
  3521.    once, e.g., it is sufficient to reserve bandwidth for a small set of
  3522.    audio streams.
  3523.  
  3524.    The basic concept of a shared bandwidth group is that the LRM will
  3525.    allocate up to some specified multiplier of the most demanding stream
  3526.    that it knows about in the group. The LRM will allocate resources
  3527.  
  3528.  
  3529.  
  3530. Delgrossi & Berger, Editors   Experimental                     [Page 63]
  3531.  
  3532. RFC 1819              ST2+ Protocol Specification            August 1995
  3533.  
  3534.  
  3535.    incrementally, as stream setup requests are received, until the total
  3536.    group requirements are satisfied. Subsequent setup requests will
  3537.    share the group's resources and will not need any additional
  3538.    resources allocated. The procedure will result in standard allocation
  3539.    where only one stream in a group traverses an agent, and shared
  3540.    allocations where multiple streams traverse an agent.
  3541.  
  3542.    To illustrate, let's call the multiplier mentioned above "N", and the
  3543.    most demanding stream that an agent knows about in a group Bmax. For
  3544.    an application that intends to allow three participants to speak at
  3545.    the same time, N has a value of three and each LRM will allocate for
  3546.    the group an amount of bandwidth up to 3*Bmax even when there are
  3547.    many more steams in the group. The LRM will reserve resources
  3548.    incrementally, per stream request, until N*Bmax resources are
  3549.    allocated. Each agent may be traversed by a different set and number
  3550.    of streams all belonging to the same group.
  3551.  
  3552.    An ST agent receiving a stream request presents the LRM with all
  3553.    necessary group information, see Section 4.5.2.2. If maximum
  3554.    bandwidth, N*Bmax, for the group has already been allocated and a new
  3555.    stream with a bandwidth demand less than Bmax is being established,
  3556.    the LRM won't allocate any further bandwidth.
  3557.  
  3558.    If there is less than N*Bmax resources allocated, the LRM will expand
  3559.    the resources allocated to the group by the amount requested in the
  3560.    new FlowSpec, up to N*Bmax resources. The LRM will update the
  3561.    FlowSpec based on what resources are available to the stream, but not
  3562.    the total resources allocated for the group.
  3563.  
  3564.    It should be noted that ST agents and LRMs become aware of a group's
  3565.    requirements only when the streams belonging to the group are
  3566.    created.  In case of the bandwidth sharing relationship, an
  3567.    application should attempt to establish the most demanding streams
  3568.    first to minimize stream setup efforts. If on the contrary the less
  3569.    demanding streams are built first, it will be always necessary to
  3570.    allocate additional bandwidth in consecutive steps as the most
  3571.    demanding streams are built. It is also up to the applications to
  3572.    coordinate their different FlowSpecs and decide upon an appropriate
  3573.    value for N.
  3574.  
  3575. 7.1.2  Fate Sharing
  3576.  
  3577.    Streams belonging to this group share the same fate. If a stream is
  3578.    deleted, the other members of the group are also deleted. This is
  3579.    intended to support stream preemption by indicating which streams are
  3580.    mutually related. If preemption of multiple streams is necessary,
  3581.    this information can be used by the LRM to delete a set of related
  3582.    streams, e.g., with impact on a single application, instead of making
  3583.  
  3584.  
  3585.  
  3586. Delgrossi & Berger, Editors   Experimental                     [Page 64]
  3587.  
  3588. RFC 1819              ST2+ Protocol Specification            August 1995
  3589.  
  3590.  
  3591.    a random choice with the possible effect of interrupting several
  3592.    different applications. This attribute does not apply to normal
  3593.    stream shut down, i.e., ReasonCode (ApplDisconnect). On normal
  3594.    disconnect, other streams belonging to such groups remain active.
  3595.  
  3596.    This relationship provides a hint on which streams should be
  3597.    preempted. Still, the LRM responsible for the preemption is not
  3598.    forced to behave accordingly, and other streams could be preempted
  3599.    first based on different criteria.
  3600.  
  3601. 7.1.3  Route Sharing
  3602.  
  3603.    Streams belonging to this group share the same paths as much as is
  3604.    possible. This can be desirable for several reasons, e.g., to exploit
  3605.    the same allocated resources or in the attempt to maintain the
  3606.    transmission order. An ST agent attempts to select the same path
  3607.    although the way this is implemented depends heavily on the routing
  3608.    algorithm which is used.
  3609.  
  3610.    If the routing algorithm is sophisticated enough, an ST agent can
  3611.    suggest that a stream is routed over an already established path.
  3612.    Otherwise, it can ask the routing algorithm for a set of legal routes
  3613.    to the destination and check whether the desired path is included in
  3614.    those feasible.
  3615.  
  3616.    Route sharing is a hint to the routing algorithm used by ST. Failing
  3617.    to route a stream through a shared path should not prevent the
  3618.    creation of a new stream or result in the deletion of an existing
  3619.    stream.
  3620.  
  3621. 7.1.4  Subnet Resources Sharing
  3622.  
  3623.    This relationship provides a hint to the data link layer functions.
  3624.    Streams belonging to this group may share the same MAC layer
  3625.    resources. As an example, the same MAC layer multicast address may be
  3626.    used for all the streams in a given group. This mechanism allows for
  3627.    a better utilization of MAC layer multicast addresses and it is
  3628.    especially useful when used with network adapters that offer a very
  3629.    small number of MAC layer multicast addresses.
  3630.  
  3631. 7.2  Relationships Orthogonality
  3632.  
  3633.    The four basic relationships, as they have been defined, are
  3634.    orthogonal. This means, any combinations of the basic relationships
  3635.    are allowed. For instance, let's consider an application that
  3636.    requires full-duplex service for a stream with multiple targets.
  3637.    Also, let's suppose that only N targets are allowed to send data back
  3638.    to the origin at the same time. In this scenario, all the reverse
  3639.  
  3640.  
  3641.  
  3642. Delgrossi & Berger, Editors   Experimental                     [Page 65]
  3643.  
  3644. RFC 1819              ST2+ Protocol Specification            August 1995
  3645.  
  3646.  
  3647.    streams could belong to the same group. They could be sharing both
  3648.    the paths and the bandwidth attributes. The Path&Bandwidth sharing
  3649.    relationship is obtained from the basic set of relationships. This
  3650.    example is important because it shows how full-duplex service can be
  3651.    efficiently obtained in ST.
  3652.  
  3653. 8.  Ancillary Functions
  3654.  
  3655.    Certain functions are required by ST host and intermediate agent
  3656.    implementations. Such functions are described in this section.
  3657.  
  3658. 8.1  Stream ID Generation
  3659.  
  3660.    The stream ID, or SID, is composed of 16-bit unique identifier and
  3661.    the stream origin's 32-bit IP address. Stream IDs must be globally
  3662.    unique.  The specific definition and format of the 16 -bit field is
  3663.    left to the implementor. This field is expected to have only local
  3664.    significance.
  3665.  
  3666.    An ST implementation has to provide a stream ID generator facility,
  3667.    so that an application or higher layer protocol can obtain a unique
  3668.    IDs from the ST layer. This is a mechanism for the application to
  3669.    request the allocation of stream ID that is independent of the
  3670.    request to create a stream. The Stream ID is used by the application
  3671.    or higher layer protocol when creating the streams.
  3672.  
  3673.    For instance, the following two functions could be made available:
  3674.  
  3675.    o   AllocateStreamID() -> result, StreamID
  3676.  
  3677.    o   ReleaseStreamID(StreamID) -> result
  3678.  
  3679.    An implementation may also provide a StreamID deletion function.
  3680.  
  3681. 8.2  Group Name Generator
  3682.  
  3683.    GroupName generation is similar to Stream ID generation. The
  3684.    GroupName includes a 16-bit unique identifier, a 32-bit creation
  3685.    timestamp, and a 32-bit IP address. Group names are globally unique.
  3686.    A GroupName includes the creator's IP address, so this reduces a
  3687.    global uniqueness problem to a simple local problem. The specific
  3688.    definitions and formats of the 16-bit field and the 32-bit creation
  3689.    timestamp are left to the implementor. These fields must be locally
  3690.    unique, and only have local significance.
  3691.  
  3692.    An ST implementation has to provide a group name generator facility,
  3693.    so that an application or higher layer protocol can obtain a unique
  3694.    GroupName from the ST layer. This is a mechanism for the application
  3695.  
  3696.  
  3697.  
  3698. Delgrossi & Berger, Editors   Experimental                     [Page 66]
  3699.  
  3700. RFC 1819              ST2+ Protocol Specification            August 1995
  3701.  
  3702.  
  3703.    to request the allocation of a GroupName that is independent of the
  3704.    request to create a stream. The GroupName is used by the application
  3705.    or higher layer protocol when creating the streams that are to be
  3706.    part of the group.
  3707.  
  3708.    For instance, the following two functions could be made available:
  3709.  
  3710.    o   AllocateGroupName() -> result, GroupName
  3711.  
  3712.    o   ReleaseGroupName(GroupName) -> result
  3713.  
  3714.    An implementation may also provide a GroupName deletion function.
  3715.  
  3716. 8.3  Checksum Computation
  3717.  
  3718.    The standard Internet checksum algorithm is used for ST: "The
  3719.    checksum field is the 16-bit one's complement of the one's complement
  3720.    sum of all 16-bit words in the header. For purposes of computing the
  3721.    checksum, the value of the checksum field is zero (0)." See
  3722.    [RFC1071], [RFC1141], and [RFC791] for suggestions for efficient
  3723.    checksum algorithms.
  3724.  
  3725. 8.4  Neighbor ST Agent Identification and Information Collection
  3726.  
  3727.    The STATUS message can be used to collect information about neighbor
  3728.    ST agents, streams the neighbor supports, and specific targets of
  3729.    streams the neighbor supports. An agent receiving a STATUS message
  3730.    provides the requested information via a STATUS-RESPONSE message.
  3731.  
  3732.    The STATUS message can be used to collect different information from
  3733.    a neighbor. It can be used to:
  3734.  
  3735. o   identify ST capable neighbors. If an ST agent wishes to check if
  3736.     a neighbor is ST capable, it should generate a STATUS message with
  3737.     an SID which has all its fields set to zero. An agent receiving a
  3738.     STATUS message with such SID should answer with a STATUS-RESPONSE
  3739.     containing the same SID, and no other stream information. The
  3740.     receiving ST agent must answer as soon as possible to aid in Round
  3741.     Trip Time estimation, see Section 8.5;
  3742.  
  3743. o   obtain information on a particular stream. If an ST agent wishes to
  3744.     check a neighbor's general information related to a specific
  3745.     stream, it should generate a STATUS message containing the stream's
  3746.     SID. An ST agent receiving such a message, will first check to see
  3747.     if the stream is known. If not known, the receiving ST agent sends a
  3748.     STATUS-RESPONSE containing the same SID, and no other stream
  3749.     information. If the stream is known, the receiving ST agent sends a
  3750.     STATUS-RESPONSE containing the stream's SID, IPHops, FlowSpec, group
  3751.  
  3752.  
  3753.  
  3754. Delgrossi & Berger, Editors   Experimental                     [Page 67]
  3755.  
  3756. RFC 1819              ST2+ Protocol Specification            August 1995
  3757.  
  3758.  
  3759.     membership (if any), and as many targets as can be included in a
  3760.     single message as limited by MTU, see Section 5.1.2. Note that all
  3761.     targets may not be included in a response to a request for general
  3762.     stream information. If information on a specific target in a stream
  3763.     is desired, the mechanism described next should be used.
  3764.  
  3765. o   obtain information on particular targets in a stream. If an ST agent
  3766.     wishes to check a neighbor's information related to one or more
  3767.     specific targets of a specific stream, it should generate a STATUS
  3768.     message containing the stream's SID and a TargetList parameter
  3769.     listing the relevant targets. An ST agent receiving such a message,
  3770.     will first check to see if the stream and target are known. If the
  3771.     stream is not known, the agent follows the process described above.
  3772.     If both the stream and targets are known, the agent responds with
  3773.     STATUS-RESPONSE containing the stream's SID, IPHops, FlowSpec, group
  3774.     membership (if any), and the requested targets that are known. If
  3775.     the stream is known but the target is not, the agent responds with a
  3776.     STATUS-RESPONSE containing the stream's SID, IPHops, FlowSpec, group
  3777.     membership (if any), but no targets.
  3778.  
  3779.    The specific formats for STATUS and STATUS-RESPONSE messages are
  3780.    defined in Section 10.4.12 and Section 10.4.13.
  3781.  
  3782. 8.5  Round Trip Time Estimation
  3783.  
  3784.    SCMP is made reliable through use of retransmission when an expected
  3785.    acknowledgment is not received in a timely manner. Timeout and
  3786.    retransmission algorithms are implementation dependent and are
  3787.    outside the scope of this document. However, it must be reasonable
  3788.    enough not to cause excessive retransmission of SCMP messages while
  3789.    maintaining the robustness of the protocol. Algorithms on this
  3790.    subject are described in [WoHD95], [Jaco88], [KaPa87].
  3791.  
  3792.    Most existing algorithms are based on an estimation of the Round Trip
  3793.    Time (RTT) between two hosts. With SCMP, if an ST agent wishes to
  3794.    have an estimate of the RTT to and from a neighbor, it should
  3795.    generate a STATUS message with an SID which has all its fields set to
  3796.    zero. An ST agent receiving a STATUS message with such SID should
  3797.    answer as rapidly as possible with a STATUS-RESPONSE message
  3798.    containing the same SID, and no other stream information. The time
  3799.    interval between the send and receive operations can be used as an
  3800.    estimate of the RTT to and from the neighbor.
  3801.  
  3802. 8.6  Network MTU Discovery
  3803.  
  3804.    At connection setup, the application at the origin asks the local ST
  3805.    agent to create streams with certain QoS requirements. The local ST
  3806.    agent fills out its network MTU value in the MaxMsgSize parameter in
  3807.  
  3808.  
  3809.  
  3810. Delgrossi & Berger, Editors   Experimental                     [Page 68]
  3811.  
  3812. RFC 1819              ST2+ Protocol Specification            August 1995
  3813.  
  3814.  
  3815.    the CONNECT message and forwards it to the next-hop ST agents. Each
  3816.    ST agent in the path checks to see if it's network MTU is smaller
  3817.    than the one specified in the CONNECT message and, if it is, the ST
  3818.    agent updates the MaxMsgSize in the CONNECT message to it's network
  3819.    MTU. If the target application decides to accept the stream, the ST
  3820.    agent at the target copies the MTU value in the CONNECT message to
  3821.    the MaxMsgSize field in the ACCEPT message and sends it back to the
  3822.    application at the origin. The MaxMsgSize field in the ACCEPT message
  3823.    is the minimum MTU of the intervening networks to that target. If the
  3824.    application has multiple targets then the minimum MTU of the stream
  3825.    is the smallest MaxMsgSize received from all the ACCEPT messages. It
  3826.    is the responsibility of the application to segment its PDUs
  3827.    according to the minimum MaxMsgSize of the stream since no data
  3828.    fragmentation is supported during the data transfer phase. If a
  3829.    particular target's MaxMsgSize is unacceptable to an application, it
  3830.    may disconnect the target from the stream and assume that the target
  3831.    cannot be supported.  When evaluating a particular target's
  3832.    MaxMsgSize, the application or the application interface will need to
  3833.    take into account the size of the ST data header.
  3834.  
  3835. 8.7  IP Encapsulation of ST
  3836.  
  3837.    ST packets may be encapsulated in IP to allow them to pass through
  3838.    routers that don't support the ST Protocol. Of course, ST resource
  3839.    management is precluded over such a path, and packet overhead is
  3840.    increased by encapsulation, but if the performance is reasonably
  3841.    predictable this may be better than not communicating at all.
  3842.  
  3843.    IP-encapsulated ST packets begin with a normal IP header. Most fields
  3844.    of the IP header should be filled in according to the same rules that
  3845.    apply to any other IP packet. Three fields of special interest are:
  3846.  
  3847. o   Protocol is 5, see [RFC1700], to indicate an ST packet is enclosed,
  3848.     as opposed to TCP or UDP, for example.
  3849.  
  3850. o   Destination Address is that of the next-hop ST agent. This may or
  3851.     may not be the target of the ST stream. There may be an intermediate
  3852.     ST agent to which the packet should be routed to take advantage of
  3853.     service guarantees on the path past that agent. Such an intermediate
  3854.     agent would not be on a directly-connected network (or else IP
  3855.     encapsulation wouldn't be needed), so it would probably not be
  3856.     listed in the normal routing table. Additional routing mechanisms,
  3857.     not defined here, will be required to learn about such agents.
  3858.  
  3859. o   Type-of-Service may be set to an appropriate value for the service
  3860.     being requested, see [RFC1700]. This feature is not implemented
  3861.     uniformly in the Internet, so its use can't be precisely defined
  3862.     here.
  3863.  
  3864.  
  3865.  
  3866. Delgrossi & Berger, Editors   Experimental                     [Page 69]
  3867.  
  3868. RFC 1819              ST2+ Protocol Specification            August 1995
  3869.  
  3870.  
  3871.    IP encapsulation adds little difficulty for the ST agent that
  3872.    receives the packet. However, when IP encapsulation is performed it
  3873.    must be done in both directions. To process the encapsulated IP
  3874.    message, the ST agents simply remove the IP header and proceed with
  3875.    ST header as usual.
  3876.  
  3877.    The more difficult part is during setup, when the ST agent must
  3878.    decide whether or not to encapsulate. If the next-hop ST agent is on
  3879.    a remote network and the route to that network is through a router
  3880.    that supports IP but not ST, then encapsulation is required. The
  3881.    routing function provides ST agents with the route and capability
  3882.    information needed to support encapsulation.
  3883.  
  3884.    On forwarding, the (mostly constant) IP Header must be inserted and
  3885.    the IP checksum appropriately updated.
  3886.  
  3887.    Applications are informed about the number of IP hops traversed on
  3888.    the path to each target. The IPHops field of the CONNECT message, see
  3889.    Section 10.4.4, carries the number of traversed IP hops to the target
  3890.    application. The field is incremented by each ST agent when IP
  3891.    encapsulation will be used to reach the next-hop ST agent. The number
  3892.    of IP hops traversed is returned to the origin in the IPHops field of
  3893.    the ACCEPT message, Section 10.4.1.
  3894.  
  3895.    When using IP Encapsulation, the MaxMsgSize field will not reflect
  3896.    the MTU of the IP encapsulated segments. This means that IP
  3897.    fragmentation and reassembly may be needed in the IP cloud to support
  3898.    a message of MaxMsgSize. IP fragmentation can only occur when the MTU
  3899.    of the IP cloud, less IP header length, is the smallest MTU in a
  3900.    stream's network path.
  3901.  
  3902. 8.8  IP Multicasting
  3903.  
  3904.    If an ST agent must use IP encapsulation to reach multiple next-hops
  3905.    toward different targets, then either the packet must be replicated
  3906.    for transmission to each next-hop, or IP multicasting may be used if
  3907.    it is implemented in the next-hop ST agents and in the intervening IP
  3908.    routers.
  3909.  
  3910.    When the stream is established, the collection of next-hop ST agents
  3911.    must be set up as an IP multicast group. The ST agent must allocate
  3912.    an appropriate IP multicast address (see Section 10.3.3) and fill
  3913.    that address in the IPMulticastAddress field of the CONNECT message.
  3914.    The IP multicast address in the CONNECT message is used to inform the
  3915.    next-hop ST agents that they should join the multicast group to
  3916.    receive subsequent PDUs. Obviously, the CONNECT message itself must
  3917.    be sent using unicast. The next-hop ST agents must be able to receive
  3918.    on the specified multicast address in order to accept the connection.
  3919.  
  3920.  
  3921.  
  3922. Delgrossi & Berger, Editors   Experimental                     [Page 70]
  3923.  
  3924. RFC 1819              ST2+ Protocol Specification            August 1995
  3925.  
  3926.  
  3927.    If the next-hop ST agent can not receive on the specified multicast
  3928.    address, it sends a REFUSE message with ReasonCode (BadMcastAddress).
  3929.    Upon receiving the REFUSE, the upstream agent can choose to retry
  3930.    with a different multicast address. Alternatively, it can choose to
  3931.    lose the efficiency of multicast and use unicast delivery.
  3932.  
  3933.    The following permanent IP multicast addresses have been assigned to
  3934.    ST:
  3935.  
  3936.            224.0.0.7 All ST routers (intermediate agents)
  3937.            224.0.0.8 All ST hosts (agents)
  3938.  
  3939.    In addition, a block of transient IP multicast addresses, 224.1.0.0 -
  3940.    224.1.255.255, has been allocated for ST multicast groups. For
  3941.    instance, the following two functions could be made available:
  3942.  
  3943.    o   AllocateMcastAddr() -> result, McastAddr
  3944.  
  3945.    o   ListenMcastAddr(McastAddr) -> result
  3946.  
  3947.    o   ReleaseMcastAddr(McastAddr) -> result
  3948.  
  3949. 9.  The ST2+ Flow Specification
  3950.  
  3951.    This section defines the ST2+ flow specification. The flow
  3952.    specification contains the user application requirements in terms of
  3953.    quality of service. Its contents are LRM dependent and are
  3954.    transparent to the ST2 setup protocol. ST2 carries the flow
  3955.    specification as part of the FlowSpec parameter, which is described
  3956.    in Section 10.3.1. The required ST2+ flow specification is included
  3957.    in the protocol only to support interoperability. ST2+ also defines a
  3958.    "null" flow specification to be used only to support testing.
  3959.  
  3960.    ST2 is not dependent on a particular flow specification format and it
  3961.    is expected that other versions of the flow specification will be
  3962.    needed in the future. Different flow specification formats are
  3963.    distinguished by the value of the Version field of the FlowSpec
  3964.    parameter, see Section 10.3.1. A single stream is always associated
  3965.    with a single flow specification format, i.e., the Version field is
  3966.    consistent throughout the whole stream. The following Version field
  3967.    values are defined:
  3968.  
  3969.  
  3970.  
  3971.  
  3972.  
  3973.  
  3974.  
  3975.  
  3976.  
  3977.  
  3978. Delgrossi & Berger, Editors   Experimental                     [Page 71]
  3979.  
  3980. RFC 1819              ST2+ Protocol Specification            August 1995
  3981.  
  3982.  
  3983.    0 - Null FlowSpec       /* must be supported */
  3984.    1 - ST Version 1
  3985.    2 - ST Version 1.5
  3986.    3 - RFC 1190 FlowSpec
  3987.    4 - HeiTS FlowSpec
  3988.    5 - BerKom FlowSpec
  3989.    6 - RFC 1363 FlowSpec
  3990.    7 - ST2+ FlowSpec       /* must be supported */
  3991.  
  3992.    FlowSpecs version #0 and #7 must be supported by ST2+
  3993.    implementations.  Version numbers in the range 1-6 indicate flow
  3994.    specifications are currently used in existing ST2 implementations.
  3995.    Values in the 128-255 range are reserved for private and experimental
  3996.    use.
  3997.  
  3998.    In general, a flow specification may support sophisticated flow
  3999.    descriptions. For example, a flow specification could represent sub-
  4000.    flows of a particular stream. This could then be used to by a
  4001.    cooperating application and LRM to forward designated packets to
  4002.    specific targets based on the different sub-flows. The reserved bits
  4003.    in the ST2 Data PDU, see Section 10.1, may be used with such a flow
  4004.    specification to designate packets associated with different sub-
  4005.    flows. The ST2+ FlowSpec is not so sophisticated, and is intended for
  4006.    use with applications that generate traffic at a single rate for
  4007.    uniform delivery to all targets.
  4008.  
  4009. 9.1  FlowSpec Version #0 - (Null FlowSpec)
  4010.  
  4011.    The flow specification identified by a #0 value of the Version field
  4012.    is called the Null FlowSpec. This flow specification causes no
  4013.    resources to be allocated. It is ignored by the LRMs. Its contents
  4014.    are never updated. Stream setup takes place in the usual way leading
  4015.    to successful stream establishment, but no resources are actually
  4016.    reserved.
  4017.  
  4018.    The purpose of the Null FlowSpec is that of facilitating
  4019.    interoperability tests by allowing streams to be built without
  4020.    actually allocating the correspondent amount of resources. The Null
  4021.    FlowSpec may also be used for testing and debugging purposes.
  4022.  
  4023.    The Null FlowSpec comprises the 4-byte FlowSpec parameter only, see
  4024.    Section 10.3.1. The third byte (Version field) must be set to 0.
  4025.  
  4026. 9.2  FlowSpec Version #7 - ST2+ FlowSpec
  4027.  
  4028.    The flow specification identified by a #7 value of the Version field
  4029.    is the ST2+ FlowSpec, to be used by all ST2+ implementations. It
  4030.    allows the user applications to express their real-time requirements
  4031.  
  4032.  
  4033.  
  4034. Delgrossi & Berger, Editors   Experimental                     [Page 72]
  4035.  
  4036. RFC 1819              ST2+ Protocol Specification            August 1995
  4037.  
  4038.  
  4039.    in the form of a QoS class, precedence, and three basic QoS
  4040.    parameters:
  4041.  
  4042.    o   message size,
  4043.  
  4044.    o   message rate,
  4045.  
  4046.    o   end-to-end delay.
  4047.  
  4048.    The QoS class indicates what kind of QoS guarantees are expected by
  4049.    the application, e.g., strict guarantees or predictive, see Section
  4050.    9.2.1. QoS parameters are expressed via a set of values:
  4051.  
  4052. o   the "desired" values indicate the QoS desired by the application.
  4053.     These values are assigned by the application and never modified by
  4054.     the LRM.
  4055.  
  4056. o   the "limit" values indicate the lowest QoS the application is
  4057.     willing to accept. These values are also assigned by the application
  4058.     and never modified by the LRM.
  4059.  
  4060. o   the "actual" values indicate the QoS that the system is able to
  4061.     provide. They are updated by the LRM at each node. The "actual"
  4062.     values are always bounded by the "limit" and "desired" values.
  4063.  
  4064. 9.2.1  QoS Classes
  4065.  
  4066.    Two QoS classes are defined:
  4067.  
  4068.    1 - QOS_PREDICTIVE      /* QoSClass field value = 0x01, must be
  4069.                               supported*/
  4070.    2 - QOS_GUARANTEED      /* QoSClass field value = 0x10, optional */
  4071.  
  4072. o   The QOS_PREDICTIVE class implies that the negotiated QoS may be
  4073.     violated for short time intervals during the data transfer. An
  4074.     application has to provide values that take into account the
  4075.     "normal" case, e.g., the "desired" message rate is the allocated rate
  4076.     for the transmission. Reservations are done for the "normal" case as
  4077.     opposite to the peak case required by the QOS_GUARANTEED service
  4078.     class. This QoS class must be supported by all implementations.
  4079.  
  4080. o   The QOS_GUARANTEED class implies that the negotiated QoS for the
  4081.     stream is never violated during the data transfer. An application
  4082.     has to provide values that take into account the worst possible
  4083.     case, e.g., the "desired" message rate is the peak rate for the
  4084.     transmission. As a result, sufficient resources to handle the peak
  4085.     rate are reserved. This strategy may lead to overbooking of
  4086.     resources, but it provides strict real-time guarantees. Support of
  4087.  
  4088.  
  4089.  
  4090. Delgrossi & Berger, Editors   Experimental                     [Page 73]
  4091.  
  4092. RFC 1819              ST2+ Protocol Specification            August 1995
  4093.  
  4094.  
  4095.     this QoS class is optional.
  4096.  
  4097.    If a LRM that doesn't support class QOS_GUARANTEED receives a
  4098.    FlowSpec containing QOS_GUARANTEED class, it informs the local ST
  4099.    agent. The ST agent may try different paths or delete the
  4100.    correspondent portion of the stream as described in Section 5.5.3,
  4101.    i.e., ReasonCode (FlowSpecError).
  4102.  
  4103. 9.2.2  Precedence
  4104.  
  4105.    Precedence is the importance of the connection being established.
  4106.    Zero represents the lowest precedence. The lowest level is expected
  4107.    to be used by default. In general, the distinction between precedence
  4108.    and priority is that precedence specifies streams that are permitted
  4109.    to take previously committed resources from another stream, while
  4110.    priority identifies those PDUs that a stream is most willing to have
  4111.    dropped.
  4112.  
  4113. 9.2.3  Maximum Data Size
  4114.  
  4115.    This parameter is expressed in bytes. It represents the maximum
  4116.    amount of data, excluding ST and other headers, allowed to be sent in
  4117.    a messages as part of the stream. The LRM first checks whether it is
  4118.    possible to get the value desired by the application (DesMaxSize). If
  4119.    not, it updates the actual value (ActMaxSize) with the available size
  4120.    unless this value is inferior to the minimum allowed by the
  4121.    application (LimitMaxSize), in which case it informs the local ST
  4122.    agent that it is not possible to build the stream along this path.
  4123.  
  4124. 9.2.4  Message Rate
  4125.  
  4126.    This parameter is expressed in messages/second. It represents the
  4127.    transmission rate for the stream. The LRM first checks whether it is
  4128.    possible to get the value desired by the application (DesRate). If
  4129.    not, it updates the actual value (ActRate) with the available rate
  4130.    unless this value is inferior to the minimum allowed by the
  4131.    application (LimitRate), in which case it informs the local ST agent
  4132.    that it is not possible to build the stream along this path.
  4133.  
  4134. 9.2.5  Delay and Delay Jitter
  4135.  
  4136.    The delay parameter is expressed in milliseconds. It represents the
  4137.    maximum end-to-end delay for the stream. The LRM first checks whether
  4138.    it is possible to get the value desired by the application
  4139.    (DesMaxDelay). If not, it updates the actual value (ActMaxDelay) with
  4140.    the available delay unless this value is greater than the maximum
  4141.    delay allowed by the application (LimitMaxDelay), in which case it
  4142.    informs the local ST agent that it is not possible to build the
  4143.  
  4144.  
  4145.  
  4146. Delgrossi & Berger, Editors   Experimental                     [Page 74]
  4147.  
  4148. RFC 1819              ST2+ Protocol Specification            August 1995
  4149.  
  4150.  
  4151.    stream along this path.
  4152.  
  4153.    The LRM also updates at each node the MinDelay field by incrementing
  4154.    it by the minimum possible delay to the next-hop. Information on the
  4155.    minimum possible delay allows to calculate the maximum end-to-end
  4156.    delay range, i.e., the time interval in which a data packet can be
  4157.    received. This interval should not exceed the DesMaxDelayRange value
  4158.    indicated by the application. The maximum end-to-end delay range is
  4159.    an upper bound of the delay jitter.
  4160.  
  4161. 9.2.6  ST2+ FlowSpec Format
  4162.  
  4163.    The ST2+ FlowSpec has the following format:
  4164.  
  4165.         0                   1                   2                   3
  4166.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4167.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4168.        |    QosClass   |  Precedence   |            0(unused)          |
  4169.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4170.        |                             DesRate                           |
  4171.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4172.        |                            LimitRate                          |
  4173.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4174.        |                             ActRate                           |
  4175.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4176.        |            DesMaxSize         |           LimitMaxSize        |
  4177.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4178.        |            ActMaxSize         |           DesMaxDelay         |
  4179.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4180.        |            LimitMaxDelay      |           ActMaxDelay         |
  4181.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4182.        |            DesMaxDelayRange   |           ActMinDelay         |
  4183.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4184.  
  4185.                         Figure 9: The ST2+ FlowSpec.
  4186.  
  4187.    The LRM modifies only "actual" fields, i.e., those beginning with
  4188.    "Act". The user application assigns values to all other fields.
  4189.  
  4190. o   QoSClass indicates which of the two defined classes of service
  4191.     applies. The two classes are: QOS_PREDICTIVE (QoSClass = 1) and
  4192.     QOS_GUARANTEED (QoSClass = 2).
  4193.  
  4194. o   Precedence indicates the stream's precedence. Zero represents the
  4195.     lowest precedence, and should be the default value.
  4196.  
  4197. o   DesRate is the desired transmission rate for the stream in messages/
  4198.     second. This field is set by the origin and is not modified by
  4199.  
  4200.  
  4201.  
  4202. Delgrossi & Berger, Editors   Experimental                     [Page 75]
  4203.  
  4204. RFC 1819              ST2+ Protocol Specification            August 1995
  4205.  
  4206.  
  4207.     intermediate agents.
  4208.  
  4209. o   LimitRate is the minimum acceptable transmission rate in messages/
  4210.     second. This field is set by the origin and is not modified by
  4211.     intermediate agents.
  4212.  
  4213. o   ActRate is the actual transmission rate allocated for the stream in
  4214.     messages/second. Each agent updates this field with the available
  4215.     rate unless this value is less than LimitRate, in which case a
  4216.     REFUSE is generated.
  4217.  
  4218. o   DesMaxSize is the desired maximum data size in bytes that will be
  4219.     sent in a message in the stream. This field is set by the origin.
  4220.  
  4221. o   LimitMaxSize is the minimum acceptable data size in bytes. This
  4222.     field is set by the origin
  4223.  
  4224. o   ActMaxSize is the actual maximum data size that may be sent in a
  4225.     message in the stream. This field is updated by each agent based on
  4226.     MTU and available resources. If available maximum size is less than
  4227.     LimitMaxSize, the connection must be refused with ReasonCode
  4228.     (CantGetResrc).
  4229.  
  4230. o   DesMaxDelay is the desired maximum end-to-end delay for the stream
  4231.     in milliseconds. This field is set by the origin.
  4232.  
  4233. o   LimitMaxDelay is the upper-bound of acceptable end-to-end delay for
  4234.     the stream in milliseconds. This field is set by the origin.
  4235.  
  4236. o   ActMaxDelay is the maximum end-to-end delay that will be seen by
  4237.     data in the stream. Each ST agent adds to this field the maximum
  4238.     delay that will be introduced by the agent, including transmission
  4239.     time to the next-hop ST agent. If the actual maximum exceeds
  4240.     LimitMaxDelay, then the connection is refused with ReasonCode
  4241.     (CantGetResrc).
  4242.  
  4243. o   DesMaxDelayRange is the desired maximum delay range that may be
  4244.     encountered end-to-end by stream data in milliseconds. This value is
  4245.     set by the application at the origin.
  4246.  
  4247. o   ActMinDelay is the actual minimum end-to-end delay that will be
  4248.     encountered by stream data in milliseconds. Each ST agent adds to
  4249.     this field the minimum delay that will be introduced by the agent,
  4250.     including transmission time to the next-hop ST agent. Each agent
  4251.     must add at least 1 millisecond. The delay range for the stream can
  4252.     be calculated from the actual maximum and minimum delay fields. It
  4253.     is expected that the range will be important to some applications.
  4254.  
  4255.  
  4256.  
  4257.  
  4258. Delgrossi & Berger, Editors   Experimental                     [Page 76]
  4259.  
  4260. RFC 1819              ST2+ Protocol Specification            August 1995
  4261.  
  4262.  
  4263. 10.  ST2 Protocol Data Units Specification
  4264.  
  4265. 10.1  Data PDU
  4266.  
  4267.    IP and ST packets can be distinguished by the IP Version Number
  4268.    field, i.e., the first four (4) bits of the packet; ST has been
  4269.    assigned the value 5 (see [RFC1700]). There is no requirement for
  4270.    compatibility between IP and ST packet headers beyond the first four
  4271.    bits. (IP uses value 4.)
  4272.  
  4273.    The ST PDUs sent between ST agents consist of an ST Header
  4274.    encapsulating either a higher layer PDU or an ST Control Message.
  4275.    Data packets are distinguished from control messages via the D-bit
  4276.    (bit 8) in the ST header.
  4277.  
  4278.    The ST Header also includes an ST Version Number, a total length
  4279.    field, a header checksum, a unique id, and the stream origin 32-bit
  4280.    IP address. The unique id and the stream origin 32-bit IP address
  4281.    form the stream id (SID). This is shown in Figure 10. Please refer to
  4282.    Section 10.6 for an explanation of the notation.
  4283.  
  4284.         0                   1                   2                   3
  4285.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4286.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4287.        |  ST=5 | Ver=3 |D| Pri |   0   |            TotalBytes         |
  4288.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4289.        |          HeaderChecksum       |            UniqueID           |
  4290.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4291.        |                         OriginIPAddress                       |
  4292.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4293.  
  4294.                             Figure 10: ST Header
  4295.  
  4296. o   ST is the IP Version Number assigned to identify ST packets. The
  4297.     value for ST is 5.
  4298.  
  4299. o   Ver is the ST Version Number. The value for the current ST2+ version
  4300.     is 3.
  4301.  
  4302. o   D (bit 8) is set to 1 in all ST data packets and to 0 in all SCMP
  4303.     control messages.
  4304.  
  4305. o   Pri (bits 9-11) is the packet-drop priority field with zero (0)
  4306.     being lowest priority and seven the highest. The field is to be used
  4307.     as described in Section 3.2.2.
  4308.  
  4309.  
  4310.  
  4311.  
  4312.  
  4313.  
  4314. Delgrossi & Berger, Editors   Experimental                     [Page 77]
  4315.  
  4316. RFC 1819              ST2+ Protocol Specification            August 1995
  4317.  
  4318.  
  4319. o   TotalBytes is the length, in bytes, of the entire ST packet, it
  4320.     includes the ST Header but does not include any local network
  4321.     headers or trailers. In general, all length fields in the ST
  4322.     Protocol are in units of bytes.
  4323.  
  4324. o   HeaderChecksum covers only the ST Header (12 bytes). The ST Protocol
  4325.     uses 16-bit checksums here in the ST Header and in each Control
  4326.     Message. For checksum computation, see Section 8.3.
  4327.  
  4328. o   UniqueID is the first element of the stream ID (SID). It is locally
  4329.     unique at the stream origin, see Section 8.1.
  4330.  
  4331. o   OriginIPAddress is the second element of the SID. It is the 32-bit
  4332.     IP address of the stream origin, see Section 8.1.
  4333.  
  4334.    Bits 12-15 must be set to zero (0) when using the flow specifications
  4335.    defined in this document, see Section 9. They may be set accordingly
  4336.    when other flow specifications are used, e.g., as described in
  4337.    [WoHD95].
  4338.  
  4339. 10.1.1  ST Data Packets
  4340.  
  4341.    ST packets whose D-bit is non-zero are data packets. Their
  4342.    interpretation is a matter for the higher layer protocols and
  4343.    consequently is not specified here. The data packets are not
  4344.    protected by an ST checksum and will be delivered to the higher layer
  4345.    protocol even with errors. ST agents will not pass data packets over
  4346.    a new hop whose setup is not complete.
  4347.  
  4348. 10.2  Control PDUs
  4349.  
  4350.    SCMP control messages are exchanged between neighbor ST agents using
  4351.    a D-bit of zero (0). The control protocol follows a request-response
  4352.    model with all requests expecting responses. Retransmission after
  4353.    timeout (see Section 4.3) is used to allow for lost or ignored
  4354.    messages. Control messages do not extend across packet boundaries; if
  4355.    a control message is too large for the MTU of a hop, its information
  4356.    is partitioned and a control message per partition is sent (see
  4357.    Section 5.1.2). All control messages have the following format
  4358.  
  4359.  
  4360.  
  4361.  
  4362.  
  4363.  
  4364.  
  4365.  
  4366.  
  4367.  
  4368.  
  4369.  
  4370. Delgrossi & Berger, Editors   Experimental                     [Page 78]
  4371.  
  4372. RFC 1819              ST2+ Protocol Specification            August 1995
  4373.  
  4374.  
  4375.         0                   1                   2                   3
  4376.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4377.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4378.        |  OpCode       |     Options   |           TotalBytes          |
  4379.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4380.        |          Reference            |          LnkReference         |
  4381.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4382.        |                         SenderIPAddress                       |
  4383.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4384.        |            Checksum           |            ReasonCode         |
  4385.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4386.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4387.        :                      OpCodeSpecificData                       :
  4388.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4389.  
  4390.                     Figure 11: ST Control Message Format
  4391.  
  4392. o   OpCode identifies the type of control message.
  4393.  
  4394. o   Options is used to convey OpCode-specific variations for a control
  4395.     message.
  4396.  
  4397. o   TotalBytes is the length of the control message, in bytes, including
  4398.     all OpCode specific fields and optional parameters. The value is
  4399.     always divisible by four (4).
  4400.  
  4401. o   Reference is a transaction number. Each sender of a request control
  4402.     message assigns a Reference number to the message that is unique
  4403.     with respect to the stream. The Reference number is used by the
  4404.     receiver to detect and discard duplicates. Each acknowledgment
  4405.     carries the Reference number of the request being acknowledged.
  4406.     Reference zero (0) is never used, and Reference numbers are assumed
  4407.     to be monotonically increasing with wraparound so that the older-
  4408.     than and more-recent-than relations are well defined.
  4409.  
  4410. o   LnkReference contains the Reference field of the request control
  4411.     message that caused this request control message to be created. It
  4412.     is used in situations where a single request leads to multiple
  4413.     responses from the same ST agent. Examples are CONNECT and CHANGE
  4414.     messages that are first acknowledged hop-by-hop and then lead to an
  4415.     ACCEPT or REFUSE response from each target.
  4416.  
  4417. o   SenderIPAddress is the 32-bit IP address of the network interface
  4418.     that the ST agent used to send the control message. This value
  4419.     changes each time the packet is forwarded by an ST agent (hop-by-
  4420.     hop).
  4421.  
  4422.  
  4423.  
  4424.  
  4425.  
  4426. Delgrossi & Berger, Editors   Experimental                     [Page 79]
  4427.  
  4428. RFC 1819              ST2+ Protocol Specification            August 1995
  4429.  
  4430.  
  4431. o   Checksum is the checksum of the control message. Because the control
  4432.     messages are sent in packets that may be delivered with bits in
  4433.     error, each control message must be checked to be error free before
  4434.     it is acted upon.
  4435.  
  4436. o   ReasonCode is set to zero (0 = NoError) in most SCMP messages.
  4437.     Otherwise, it can be set to an appropriate value to indicate an
  4438.     error situation as defined in Section 10.5.3.
  4439.  
  4440. o   OpCodeSpecificData contains any additional information that is
  4441.     associated with the control message. It depends on the specific
  4442.     control message and is explained further below. In some response
  4443.     control messages, fields of zero (0) are included to allow the
  4444.     format to match that of the corresponding request message. The
  4445.     OpCodeSpecificData may also contain optional parameters. The
  4446.     specifics of OpCodeSpecificData are defined in Section 10.3.
  4447.  
  4448. 10.3  Common SCMP Elements
  4449.  
  4450.    Several fields and parameters (referred to generically as elements)
  4451.    are common to two or more PDUs. They are described in detail here
  4452.    instead of repeating their description several times. In many cases,
  4453.    the presence of a parameter is optional. To permit the parameters to
  4454.    be easily defined and parsed, each is identified with a PCode byte
  4455.    that is followed by a PBytes byte indicating the length of the
  4456.    parameter in bytes (including the PCode, PByte, and any padding
  4457.    bytes). If the length of the information is not a multiple of four
  4458.    (4) bytes, the parameter is padded with one to three zero (0) bytes.
  4459.    PBytes is thus always a multiple of four (4). Parameters can be
  4460.    present in any order.
  4461.  
  4462. 10.3.1  FlowSpec
  4463.  
  4464.    The FlowSpec parameter (PCode = 1) is used in several SCMP messages
  4465.    to convey the ST2 flow specification. The FlowSpec parameter has the
  4466.    following format:
  4467.  
  4468.         0                   1                   2                   3
  4469.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4470.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4471.        |   PCode = 1   |    PBytes     |   Version     |       0       |
  4472.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4473.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4474.        :                        FlowSpec detail                        :
  4475.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4476.  
  4477.                        Figure 12: FlowSpec Parameter
  4478.  
  4479.  
  4480.  
  4481.  
  4482. Delgrossi & Berger, Editors   Experimental                     [Page 80]
  4483.  
  4484. RFC 1819              ST2+ Protocol Specification            August 1995
  4485.  
  4486.  
  4487. o   the Version field contains the FlowSpec version.
  4488.  
  4489. o   the FlowSpec detail field contains the flow specification and is
  4490.     transparent to the ST agent. It is the data structure to be passed
  4491.     to the LRM. It must be 4-byte aligned.
  4492.  
  4493.    The Null FlowSpec, see Section 9.1, has no FlowSpec detail field.
  4494.    PBytes is set to four (4), and Version is set to zero (0). The ST2+
  4495.    FlowSpec, see Section 9.2, is a 32-byte data structure. PBytes is set
  4496.    to 36, and Version is set to seven (7).
  4497.  
  4498. 10.3.2  Group
  4499.  
  4500.    The Group parameter (PCode = 2) is an optional argument used to
  4501.    indicate that the stream is a member in the specified group.
  4502.  
  4503.         0                   1                   2                   3
  4504.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4505.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4506.        |  PCode = 2    |   PBytes = 16 |           GroupUniqueID       |
  4507.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4508.        |                        GroupCreationTime                      |
  4509.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4510.        |                     GroupInitiatorIPAddress                   |
  4511.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4512.        |            Relationship       |                 N             |
  4513.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4514.  
  4515.                          Figure 13: Group Parameter
  4516.  
  4517. o   GroupUniqueID, GroupInitiatorIPAddress, and GroupCreationTime
  4518.     together form the GroupName field. They are allocated by the group
  4519.     name generator function, see Section 8.2. GroupUniqueID and
  4520.     GroupCreationTime are implementation specific and have only local
  4521.     definitions.
  4522.  
  4523. o   Relationship has the following format:
  4524.  
  4525.                                             0
  4526.                         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
  4527.                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4528.                        |    0 (unused)         |S|P|F|B|
  4529.                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4530.  
  4531.                        Figure 14: Relationship Field
  4532.  
  4533.  
  4534.  
  4535.  
  4536.  
  4537.  
  4538. Delgrossi & Berger, Editors   Experimental                     [Page 81]
  4539.  
  4540. RFC 1819              ST2+ Protocol Specification            August 1995
  4541.  
  4542.  
  4543.    The B, F, P, S bits correspond to Bandwidth, Fate, Path, and Subnet
  4544.    resources sharing, see Section 7. A value of 1 indicates that the
  4545.    relationship exists for this group. All combinations of the four bits
  4546.    are allowed. Bits 0-11 of the Relationship field are reserved for
  4547.    future use and must be set to 0.
  4548.  
  4549. o   N contains a legal value only if the B-bit is set. It is the value
  4550.     of the N parameter to be used as explained in Section 7.1.1.
  4551.  
  4552. 10.3.3  MulticastAddress
  4553.  
  4554.    The MulticastAddress parameter (PCode = 3) is an optional parameter
  4555.    that is used when using IP encapsulation and setting up an IP
  4556.    multicast group. This parameter is used to communicate the desired IP
  4557.    multicast address to next-hop ST agents that should become members of
  4558.    the group, see Section 8.8.
  4559.  
  4560.         0                   1                   2                   3
  4561.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4562.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4563.        |  PCode = 3    |   PBytes = 8  |                0              |
  4564.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4565.        |                        IPMulticastAddress                     |
  4566.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4567.  
  4568.                         Figure 15:  MulticastAddress
  4569.  
  4570. o   IPMulticastAddress is the 32-bit IP multicast address to be used to
  4571.     receive data packets for the stream.
  4572.  
  4573. 10.3.4  Origin
  4574.  
  4575.    The Origin parameter (PCode = 4) is used to identify the next higher
  4576.    protocol, and the SAP being used in conjunction with that protocol.
  4577.  
  4578.         0                   1                   2                   3
  4579.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4580.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4581.        |  PCode = 5    |   PBytes      | NextPcol      |OriginSAPBytes |
  4582.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4583.        :                OriginSAP                      :     Padding   |
  4584.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4585.  
  4586.                              Figure 16: Origin
  4587.  
  4588.  
  4589.  
  4590.  
  4591.  
  4592.  
  4593.  
  4594. Delgrossi & Berger, Editors   Experimental                     [Page 82]
  4595.  
  4596. RFC 1819              ST2+ Protocol Specification            August 1995
  4597.  
  4598.  
  4599. o   NextPcol is an 8-bit field used in demultiplexing operations to
  4600.     identify the protocol to be used above ST. The values of NextPcol
  4601.     are in the same number space as the IP header's Protocol field and
  4602.     are consequently defined in the Assigned Numbers RFC [RFC1700].
  4603.  
  4604. o   OriginSAPBytes specifies the length of the OriginSAP, exclusive of
  4605.     any padding required to maintain 32-bit alignment.
  4606.  
  4607. o   OriginSAP identifies the origin's SAP associated with the NextPcol
  4608.     protocol.
  4609.  
  4610.    Note that the 32-bit IP address of the stream origin is not included
  4611.    in this parameter because it is always available as part of the ST
  4612.    header.
  4613.  
  4614. 10.3.5  RecordRoute
  4615.  
  4616.    The RecordRoute parameter (PCode = 5) is used to request that the
  4617.    route between the origin and a target be recorded and delivered to
  4618.    the user application. The ST agent at the origin (or target)
  4619.    including this parameter, has to determine the parameter's length,
  4620.    indicated by the PBytes field. ST agents processing messages
  4621.    containing this parameter add their receiving IP address in the
  4622.    position indicated by the FreeOffset field, space permitting. If no
  4623.    space is available, the parameter is passed unchanged. When included
  4624.    by the origin, all agents between the origin and the target add their
  4625.    IP addresses and this information is made available to the
  4626.    application at the target. When included by the target, all agents
  4627.    between the target and the origin, inclusive, add their IP addresses
  4628.    and this information is made available to the application at the
  4629.    origin.
  4630.  
  4631.         0                   1                   2                   3
  4632.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4633.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4634.        |   PCode = 5   |     PBytes    |       0       |  FreeOffset   |
  4635.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4636.        |                          IP Address 1                         |
  4637.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4638.        :                              ...                              :
  4639.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4640.        |                          IP Address N                         |
  4641.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4642.  
  4643.                            Figure 17: RecordRoute
  4644.  
  4645. o   PBytes is the length of the parameter in bytes. Length is determined
  4646.     by the agent (target or origin) that first introduces the parameter.
  4647.  
  4648.  
  4649.  
  4650. Delgrossi & Berger, Editors   Experimental                     [Page 83]
  4651.  
  4652. RFC 1819              ST2+ Protocol Specification            August 1995
  4653.  
  4654.  
  4655.     Once set, the length of the parameter remains unchanged.
  4656.  
  4657. o   FreeOffset indicates the offset, relative to the start of the
  4658.     parameter, for the next IP address to be recorded. When the
  4659.     FreeOffset is greater than, or equal to, PBytes the RecordRoute
  4660.     parameter is full.
  4661.  
  4662. o   IP Address is filled in, space permitting, by each ST agent
  4663.     processing this parameter.
  4664.  
  4665. 10.3.6  Target and TargetList
  4666.  
  4667.    Several control messages use a parameter called TargetList (PCode =
  4668.    6), which contains information about the targets to which the message
  4669.    pertains. For each Target in the TargetList, the information includes
  4670.    the 32-bit IP address of the target, the SAP applicable to the next
  4671.    higher layer protocol, and the length of the SAP (SAPBytes).
  4672.    Consequently, a Target structure can be of variable length. Each
  4673.    entry has the format shown in Figure 18.
  4674.  
  4675.         0                   1                   2                   3
  4676.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4677.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4678.        |                        Target IP Address                      |
  4679.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4680.        |  TargetBytes  |  SAPBytes     |     SAP       :    Padding    |
  4681.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4682.  
  4683.                              Figure 18: Target
  4684.  
  4685. o   TargetIPAddress is the 32-bit IP Address of the Target.
  4686.  
  4687. o   TargetBytes is the length of the Target structure, beginning with
  4688.     the TargetIPAddress.
  4689.  
  4690. o   SAPBytes is the length of the SAP, excluding any padding required to
  4691.     maintain 32-bit alignment.
  4692.  
  4693. o   SAP may be longer than 2 bytes and it includes a padding when
  4694.     required. There would be no padding required for SAPs with lengths
  4695.     of 2, 6, 10, etc., bytes.
  4696.  
  4697.  
  4698.  
  4699.  
  4700.  
  4701.  
  4702.  
  4703.  
  4704.  
  4705.  
  4706. Delgrossi & Berger, Editors   Experimental                     [Page 84]
  4707.  
  4708. RFC 1819              ST2+ Protocol Specification            August 1995
  4709.  
  4710.  
  4711.         0                   1                   2                   3
  4712.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4713.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4714.        |  PCode = 6    |   PBytes      |           TargetCount = N     |
  4715.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4716.        |                           Target 1                            |
  4717.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4718.        :                               :                               :
  4719.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4720.        |                           Target N                            |
  4721.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4722.  
  4723.                            Figure 19: TargetList
  4724. 10.3.7  UserData
  4725.  
  4726.    The UserData parameter (PCode = 7) is an optional parameter that may
  4727.    be used by the next higher protocol or an application to convey
  4728.    arbitrary information to its peers. This parameter is propagated in
  4729.    some control messages and its contents have no significance to ST
  4730.    agents. Note that since the size of control messages is limited by
  4731.    the smallest MTU in the path to the targets, the maximum size of this
  4732.    parameter cannot be specified a priori. If the size of this parameter
  4733.    causes a message to exceed the network MTU, an ST agent behaves as
  4734.    described in Section 5.1.2. The parameter must be padded to a
  4735.    multiple of 32 bits.
  4736.  
  4737.         0                   1                   2                   3
  4738.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4739.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4740.        |  PCode = 7    |   PBytes      |           UserBytes           |
  4741.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4742.        :                      UserInfo                 :   Padding     |
  4743.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4744.  
  4745.                             Figure 20:  UserData
  4746.  
  4747. o   UserBytes specifies the number of valid UserInfo bytes.
  4748.  
  4749. o   UserInfo is arbitrary data meaningful to the next higher protocol
  4750.     layer or application.
  4751.  
  4752.  
  4753.  
  4754.  
  4755.  
  4756.  
  4757.  
  4758.  
  4759.  
  4760.  
  4761.  
  4762. Delgrossi & Berger, Editors   Experimental                     [Page 85]
  4763.  
  4764. RFC 1819              ST2+ Protocol Specification            August 1995
  4765.  
  4766.  
  4767. 10.3.8  Handling of Undefined Parameters
  4768.  
  4769.    An ST agent must be able to handle all parameters listed above. To
  4770.    support possible future uses, parameters with unknown PCodes must
  4771.    also be supported. If an agent receives a message containing a
  4772.    parameter with an unknown Pcode value, the agent should handle the
  4773.    parameter as if it was a UserData parameter. That is, the contents of
  4774.    the parameter should be ignored, and the message should be
  4775.    propagated, as appropriate, along with the related control message.
  4776.  
  4777. 10.4  ST Control Message PDUs
  4778.  
  4779.    ST Control messages are described in the following section. Please
  4780.    refer to Section 10.6 for an explanation of the notation.
  4781.  
  4782. 10.4.1  ACCEPT
  4783.  
  4784.    ACCEPT (OpCode = 1) is issued by a target as a positive response to a
  4785.    CONNECT message. It implies that the target is prepared to accept
  4786.    data from the origin along the stream that was established by the
  4787.    CONNECT.  ACCEPT is also issued as a positive response to a CHANGE
  4788.    message. It implies that the target accepts the proposed stream
  4789.    modification.
  4790.  
  4791.    ACCEPT is relayed by the ST agents from the target to the origin
  4792.    along the path established by CONNECT (or CHANGE) but in the reverse
  4793.    direction. ACCEPT must be acknowledged with ACK at each hop.
  4794.  
  4795.  
  4796.  
  4797.  
  4798.  
  4799.  
  4800.  
  4801.  
  4802.  
  4803.  
  4804.  
  4805.  
  4806.  
  4807.  
  4808.  
  4809.  
  4810.  
  4811.  
  4812.  
  4813.  
  4814.  
  4815.  
  4816.  
  4817.  
  4818. Delgrossi & Berger, Editors   Experimental                     [Page 86]
  4819.  
  4820. RFC 1819              ST2+ Protocol Specification            August 1995
  4821.  
  4822.  
  4823.         0                   1                   2                   3
  4824.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4825.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4826.        |  OpCode = 1   |      0        |           TotalBytes          |
  4827.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4828.        |      Reference                |         LnkReference          |
  4829.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4830.        |                         SenderIPAddress                       |
  4831.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4832.        |            Checksum           |          ReasonCode = 0       |
  4833.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4834.        |          MaxMsgSize           |          RecoveryTimeout      |
  4835.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4836.        |                      StreamCreationTime                       |
  4837.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4838.        |   IPHops      |                        0                      |
  4839.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4840.        :                           FlowSpec                            :
  4841.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4842.        :                           TargetList                          :
  4843.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4844.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4845.        :                           RecordRoute                         :
  4846.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4847.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4848.        :                           UserData                            :
  4849.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4850.  
  4851.                      Figure 21: ACCEPT Control Message
  4852.  
  4853. o   Reference contains a number assigned by the ST agent sending ACCEPT
  4854.     for use in the acknowledging ACK.
  4855.  
  4856. o   LnkReference is the Reference number from the corresponding CONNECT
  4857.     (or CHANGE)
  4858.  
  4859. o   MaxMsgSize indicates the smallest MTU along the path traversed by
  4860.     the stream. This field is only set when responding to a CONNECT
  4861.     request.
  4862.  
  4863. o   RecoveryTimeout reflects the nominal number of milliseconds that the
  4864.     application is willing to wait for a failed system component to be
  4865.     detected and any corrective action to be taken. This field
  4866.     represents what can actually be supported by each participating
  4867.     agent, and is only set when responding to a CONNECT request.
  4868.  
  4869. o   StreamCreationTime is the 32- bits system dependent timestamp copied
  4870.     from the corresponding CONNECT request.
  4871.  
  4872.  
  4873.  
  4874. Delgrossi & Berger, Editors   Experimental                     [Page 87]
  4875.  
  4876. RFC 1819              ST2+ Protocol Specification            August 1995
  4877.  
  4878.  
  4879. o   IPHops is the number of IP encapsulated hops traversed by the
  4880.     stream. This field is set to zero by the origin, and is incremented
  4881.     at each IP encapsulating agent.
  4882.  
  4883. 10.4.2  ACK
  4884.  
  4885.    ACK (OpCode = 2) is used to acknowledge a request. The ACK message is
  4886.    not propagated beyond the previous-hop or next-hop ST agent.
  4887.  
  4888.         0                   1                   2                   3
  4889.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4890.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4891.        |  OpCode = 2   |     0         |           TotalBytes          |
  4892.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4893.        |       Reference               |           LnkReference = 0    |
  4894.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4895.        |                         SenderIPAddress                       |
  4896.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4897.        |       Checksum                |           ReasonCode          |
  4898.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4899.  
  4900.                        Figure 22: ACK Control Message
  4901.  
  4902. o   Reference is the Reference number of the control message being
  4903.     acknowledged.
  4904.  
  4905. o   ReasonCode is usually NoError, but other possibilities exist, e.g.,
  4906.     DuplicateIgn.
  4907.  
  4908.  
  4909.  
  4910.  
  4911.  
  4912.  
  4913.  
  4914.  
  4915.  
  4916.  
  4917.  
  4918.  
  4919.  
  4920.  
  4921.  
  4922.  
  4923.  
  4924.  
  4925.  
  4926.  
  4927.  
  4928.  
  4929.  
  4930. Delgrossi & Berger, Editors   Experimental                     [Page 88]
  4931.  
  4932. RFC 1819              ST2+ Protocol Specification            August 1995
  4933.  
  4934.  
  4935. 10.4.3  CHANGE
  4936.  
  4937.    CHANGE (OpCode = 3) is used to change the FlowSpec of an established
  4938.    stream. The CHANGE message is processed similarly to CONNECT, except
  4939.    that it travels along the path of an established stream. CHANGE must
  4940.    be propagated until it reaches the related stream's targets. CHANGE
  4941.    must be acknowledged with ACK at each hop.
  4942.  
  4943.         0                   1                   2                   3
  4944.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  4945.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4946.        |  OpCode = 3   |G|I|     0     |           TotalBytes          |
  4947.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4948.        |           Reference           |          LnkReference = 0     |
  4949.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4950.        |                        SenderIPAddress                        |
  4951.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4952.        |            Checksum           |          ReasonCode = 0       |
  4953.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4954.        :                            FlowSpec                           :
  4955.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4956.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4957.        :                           TargetList                          :
  4958.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4959.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4960.        :                           RecordRoute                         :
  4961.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4962.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4963.        :                            UserData                           :
  4964.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4965.  
  4966.                      Figure 23: CHANGE Control Message
  4967.  
  4968. o   G (bit 8) is used to request a global, stream-wide change; the
  4969.     TargetList parameter should be omitted when the G bit is specified.
  4970.  
  4971. o   I (bit 7) is used to indicate that the LRM is permitted to interrupt
  4972.     and, if needed, break the stream in the process of trying to satisfy
  4973.     the requested change.
  4974.  
  4975. o   Reference contains a number assigned by the ST agent sending CHANGE
  4976.     for use in the acknowledging ACK.
  4977.  
  4978. 10.4.4  CONNECT
  4979.  
  4980.    CONNECT (OpCode = 4) requests the setup of a new stream or an
  4981.    addition to or recovery of an existing stream. Only the origin can
  4982.    issue the initial set of CONNECTs to setup a stream, and the first
  4983.  
  4984.  
  4985.  
  4986. Delgrossi & Berger, Editors   Experimental                     [Page 89]
  4987.  
  4988. RFC 1819              ST2+ Protocol Specification            August 1995
  4989.  
  4990.  
  4991.    CONNECT to each next-hop is used to convey the SID.
  4992.  
  4993.    The next-hop initially responds with an ACK, which implies that the
  4994.    CONNECT was valid and is being processed. The next-hop will later
  4995.    relay back either an ACCEPT or REFUSE from each target. An
  4996.    intermediate ST agent that receives a CONNECT behaves as explained in
  4997.    Section 4.5.
  4998.  
  4999.         0                   1                   2                   3
  5000.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5001.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5002.        |  OpCode = 4   |J N|S|    0    |           TotalBytes          |
  5003.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5004.        |           Reference           |          LnkReference = 0     |
  5005.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5006.        |                         SenderIPAddress                       |
  5007.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5008.        |           Checksum            |          ReasonCode = 0       |
  5009.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5010.        |           MaxMsgSize          |          RecoveryTimeout      |
  5011.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5012.        |                        StreamCreationTime                     |
  5013.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5014.        |   IPHops      |                        0                      |
  5015.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5016.        :                             Origin                            :
  5017.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5018.        :                           FlowSpec                            :
  5019.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5020.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5021.        :                          TargetList                           :
  5022.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5023.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5024.        :                          RecordRoute                          :
  5025.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5026.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5027.        :                             Group                             :
  5028.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5029.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5030.        :                        MulticastAddress                       :
  5031.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5032.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5033.        :                            UserData                           :
  5034.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5035.  
  5036.                      Figure 24: CONNECT Control Message
  5037.  
  5038.  
  5039.  
  5040.  
  5041.  
  5042. Delgrossi & Berger, Editors   Experimental                     [Page 90]
  5043.  
  5044. RFC 1819              ST2+ Protocol Specification            August 1995
  5045.  
  5046.  
  5047. o   JN (bits 8 and 9) indicate the join authorization level for the
  5048.     stream, see Section 4.4.2.
  5049.  
  5050. o   S (bit 10) indicates the NoRecovery option (Section 4.4.1). When the
  5051.     S-bit is set (1), the NoRecovery option is specified for the stream.
  5052.  
  5053. o   Reference contains a number assigned by the ST agent sending CONNECT
  5054.     for use in the acknowledging ACK.
  5055.  
  5056. o   MaxMsgSize indicates the smallest MTU along the path traversed by
  5057.     the stream. This field is initially set to the network MTU of the
  5058.     agent issues the CONNECT.
  5059.  
  5060. o   RecoveryTimeout is the nominal number of milliseconds that the
  5061.     application is willing to wait for failed system component to be
  5062.     detected and any corrective action to be taken.
  5063.  
  5064. o   StreamCreationTime is the 32- bits system dependent timestamp
  5065.     generated by the ST agent issuing the CONNECT.
  5066.  
  5067. o   IPHops is the number of IP encapsulated hops traversed by the
  5068.     stream. This field is set to zero by the origin, and is incremented
  5069.     at each IP encapsulating agent.
  5070.  
  5071.  
  5072.  
  5073.  
  5074.  
  5075.  
  5076.  
  5077.  
  5078.  
  5079.  
  5080.  
  5081.  
  5082.  
  5083.  
  5084.  
  5085.  
  5086.  
  5087.  
  5088.  
  5089.  
  5090.  
  5091.  
  5092.  
  5093.  
  5094.  
  5095.  
  5096.  
  5097.  
  5098. Delgrossi & Berger, Editors   Experimental                     [Page 91]
  5099.  
  5100. RFC 1819              ST2+ Protocol Specification            August 1995
  5101.  
  5102.  
  5103. 10.4.5  DISCONNECT
  5104.  
  5105.    DISCONNECT (OpCode = 5) is used by an origin to tear down an
  5106.    established stream or part of a stream, or by an intermediate ST
  5107.    agent that detects a failure between itself and its previous-hop, as
  5108.    distinguished by the ReasonCode. The DISCONNECT message specifies the
  5109.    list of targets that are to be disconnected. An ACK is required in
  5110.    response to a DISCONNECT message. The DISCONNECT message is
  5111.    propagated all the way to the specified targets. The targets are
  5112.    expected to terminate their participation in the stream.
  5113.  
  5114.         0                   1                   2                   3
  5115.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5116.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5117.        |  OpCode = 5   |G|    0        |           TotalBytes          |
  5118.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5119.        |      Reference                |     LnkReference = 0          |
  5120.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5121.        |                         SenderIPAddress                       |
  5122.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5123.        |            Checksum           |          ReasonCode           |
  5124.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5125.        |                      GeneratorIPAddress                       |
  5126.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5127.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5128.        :                           TargetList                          :
  5129.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5130.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5131.        :                            UserData                           :
  5132.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5133.  
  5134.                    Figure 25: DISCONNECT Control Message
  5135.  
  5136. o   G (bit 8) is used to request a DISCONNECT of all the stream's
  5137.     targets. TargetList should be omitted when the G-bit is set (1). If
  5138.     TargetList is present, it is ignored.
  5139.  
  5140. o   Reference contains a number assigned by the ST agent sending
  5141.     DISCONNECT for use in the acknowledging ACK.
  5142.  
  5143. o   ReasonCode reflects the event that initiated the message.
  5144.  
  5145. o   GeneratorIPAddress is the 32-bit IP address of the host that first
  5146.     generated the DISCONNECT message.
  5147.  
  5148.  
  5149.  
  5150.  
  5151.  
  5152.  
  5153.  
  5154. Delgrossi & Berger, Editors   Experimental                     [Page 92]
  5155.  
  5156. RFC 1819              ST2+ Protocol Specification            August 1995
  5157.  
  5158.  
  5159. 10.4.6  ERROR
  5160.  
  5161.    ERROR (OpCode = 6) is sent in acknowledgment to a request in which an
  5162.    error is detected. No action is taken on the erroneous request. No
  5163.    ACK is expected. The ERROR message is not propagated beyond the
  5164.    previous-hop or next-hop ST agent. An ERROR is never sent in response
  5165.    to another ERROR. The receiver of an ERROR is encouraged to try again
  5166.    without waiting for a retransmission timeout.
  5167.  
  5168.         0                   1                   2                   3
  5169.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5170.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5171.        |  OpCode = 6   |       0       |           TotalBytes          |
  5172.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5173.        |      Reference                |     LnkReference = 0          |
  5174.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5175.        |                         SenderIPAddress                       |
  5176.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5177.        |            Checksum           |        ReasonCode             |
  5178.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5179.        :                           PDUInError                          :
  5180.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5181.  
  5182.                       Figure 26: ERROR Control Message
  5183.  
  5184. o   Reference is the Reference number of the erroneous request.
  5185.  
  5186. o   ReasonCode indicates the error that triggered the message.
  5187.  
  5188. o   PDUInError is the PDU in error, beginning with the ST Header. This
  5189.     parameter is optional. Its length is limited by network MTU, and may
  5190.     be truncated when too long.
  5191.  
  5192.  
  5193.  
  5194.  
  5195.  
  5196.  
  5197.  
  5198.  
  5199.  
  5200.  
  5201.  
  5202.  
  5203.  
  5204.  
  5205.  
  5206.  
  5207.  
  5208.  
  5209.  
  5210. Delgrossi & Berger, Editors   Experimental                     [Page 93]
  5211.  
  5212. RFC 1819              ST2+ Protocol Specification            August 1995
  5213.  
  5214.  
  5215. 10.4.7  HELLO
  5216.  
  5217.    HELLO (OpCode = 7) is used as part of the ST failure detection
  5218.    mechanism, see Section 6.1.
  5219.  
  5220.         0                   1                   2                   3
  5221.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5222.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5223.        |  OpCode = 7   |R|    0        |           TotalBytes          |
  5224.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5225.        |       Reference = 0           |        LnkReference = 0       |
  5226.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5227.        |                         SenderIPAddress                       |
  5228.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5229.        |         Checksum              |          ReasonCode = 0       |
  5230.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5231.        |                          HelloTimer                           |
  5232.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5233.  
  5234.                       Figure 27: HELLO Control Message
  5235.  
  5236. o   R (bit 8) is used for the Restarted-bit.
  5237.  
  5238. o   HelloTimer represents the time in millisecond since the agent was
  5239.     restarted, modulo the precision of the field. It is used to detect
  5240.     duplicate or delayed HELLO messages.
  5241.  
  5242.  
  5243.  
  5244.  
  5245.  
  5246.  
  5247.  
  5248.  
  5249.  
  5250.  
  5251.  
  5252.  
  5253.  
  5254.  
  5255.  
  5256.  
  5257.  
  5258.  
  5259.  
  5260.  
  5261.  
  5262.  
  5263.  
  5264.  
  5265.  
  5266. Delgrossi & Berger, Editors   Experimental                     [Page 94]
  5267.  
  5268. RFC 1819              ST2+ Protocol Specification            August 1995
  5269.  
  5270.  
  5271. 10.4.8  JOIN
  5272.  
  5273.    JOIN (OpCode = 8) is used as part of the ST steam joining mechanism,
  5274.    see Section 4.6.3.
  5275.  
  5276.         0                   1                   2                   3
  5277.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5278.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5279.        |  OpCode = 8   |      0        |           TotalBytes          |
  5280.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5281.        |      Reference                |         LnkReference = 0      |
  5282.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5283.        |                         SenderIPAddress                       |
  5284.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5285.        |            Checksum           |          ReasonCode = 0       |
  5286.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5287.        |                      GeneratorIPAddress                       |
  5288.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5289.        :                          TargetList                           :
  5290.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5291.  
  5292.                       Figure 28: JOIN Control Message
  5293.  
  5294. o   Reference contains a number assigned by the ST agent sending JOIN
  5295.     for use in the acknowledging ACK.
  5296.  
  5297. o   GeneratorIPAddress is the 32-bit IP address of the host that
  5298.     generated the JOIN message.
  5299.  
  5300. o   TargetList is the information associated with the target to be added
  5301.     to the stream.
  5302.  
  5303.  
  5304.  
  5305.  
  5306.  
  5307.  
  5308.  
  5309.  
  5310.  
  5311.  
  5312.  
  5313.  
  5314.  
  5315.  
  5316.  
  5317.  
  5318.  
  5319.  
  5320.  
  5321.  
  5322. Delgrossi & Berger, Editors   Experimental                     [Page 95]
  5323.  
  5324. RFC 1819              ST2+ Protocol Specification            August 1995
  5325.  
  5326.  
  5327. 10.4.9  JOIN-REJECT
  5328.  
  5329.    JOIN-REJECT (OpCode = 9) is used as part of the ST steam joining
  5330.    mechanism, see Section 4.6.3.
  5331.  
  5332.         0                   1                   2                   3
  5333.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5334.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5335.        |  OpCode = 9   |      0        |           TotalBytes          |
  5336.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5337.        |      Reference                |          LnkReference         |
  5338.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5339.        |                         SenderIPAddress                       |
  5340.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5341.        |            Checksum           |          ReasonCode           |
  5342.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5343.        |                      GeneratorIPAddress                       |
  5344.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5345.  
  5346.                    Figure 29: JOIN-REJECT Control Message
  5347.  
  5348. o   Reference contains a number assigned by the ST agent sending the
  5349.     REFUSE for use in the acknowledging ACK.
  5350.  
  5351. o   LnkReference is the Reference number from the corresponding JOIN
  5352.     message.
  5353.  
  5354. o   ReasonCode reflects the reason why the JOIN request was rejected.
  5355.  
  5356. o   GeneratorIPAddress is the 32-bit IP address of the host that first
  5357.     generated the JOIN-REJECT message.
  5358.  
  5359.  
  5360.  
  5361.  
  5362.  
  5363.  
  5364.  
  5365.  
  5366.  
  5367.  
  5368.  
  5369.  
  5370.  
  5371.  
  5372.  
  5373.  
  5374.  
  5375.  
  5376.  
  5377.  
  5378. Delgrossi & Berger, Editors   Experimental                     [Page 96]
  5379.  
  5380. RFC 1819              ST2+ Protocol Specification            August 1995
  5381.  
  5382.  
  5383. 10.4.10  NOTIFY
  5384.  
  5385.    NOTIFY (OpCode = 10) is issued by an ST agent to inform other ST
  5386.    agents of events that may be significant. NOTIFY may be propagated
  5387.    beyond the previous-hop or next-hop ST agent depending on the
  5388.    ReasonCode, see Section 10.5.3; NOTIFY must be acknowledged with an
  5389.    ACK.
  5390.  
  5391.         0                   1                   2                   3
  5392.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5393.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5394.        |  OpCode = 10  |      0        |           TotalBytes          |
  5395.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5396.        |      Reference                |         LnkReference = 0      |
  5397.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5398.        |                         SenderIPAddress                       |
  5399.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5400.        |            Checksum           |          ReasonCode           |
  5401.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5402.        |                      DetectorIPAddress                        |
  5403.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5404.        |          MaxMsgSize           |          RecoveryTimeout      |
  5405.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5406.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5407.        :                           FlowSpec                            :
  5408.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5409.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5410.        :                           TargetList                          :
  5411.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5412.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5413.        :                           UserData                            :
  5414.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5415.  
  5416.                      Figure 30: NOTIFY Control Message
  5417.  
  5418. o   Reference contains a number assigned by the ST agent sending the
  5419.     NOTIFY for use in the acknowledging ACK.
  5420.  
  5421. o   ReasonCode identifies the reason for the notification.
  5422.  
  5423. o   DetectorIPAddress is the 32-bit IP address of the ST agent that
  5424.     detects the event.
  5425.  
  5426. o   MaxMsgSize is set when the MTU of the listed targets has changed
  5427.     (e.g., due to recovery), or when the notification is generated after
  5428.     a successful JOIN. Otherwise it is set to zero (0).
  5429.  
  5430.  
  5431.  
  5432.  
  5433.  
  5434. Delgrossi & Berger, Editors   Experimental                     [Page 97]
  5435.  
  5436. RFC 1819              ST2+ Protocol Specification            August 1995
  5437.  
  5438.  
  5439. o   RecoveryTimeout is set when the notification is generated after a
  5440.     successful JOIN. Otherwise it is set to zero (0).
  5441.  
  5442. o   FlowSpec is present when the notification is generated after a
  5443.     successful JOIN.
  5444.  
  5445. o   TargetList is present when the notification is related to one or
  5446.     more targets, or when MaxMsgSize is set
  5447.  
  5448. o   UserData is present if the notification is generated after a
  5449.     successful JOIN and the UserData parameter was set in the ACCEPT
  5450.     message.
  5451.  
  5452. 10.4.11  REFUSE
  5453.  
  5454.    REFUSE (OpCode = 11) is issued by a target that either does not wish
  5455.    to accept a CONNECT message or wishes to remove itself from an
  5456.    established stream. It might also be issued by an intermediate ST
  5457.    agent in response to a CONNECT or CHANGE either to terminate a
  5458.    routing loop, or when a satisfactory next-hop to a target cannot be
  5459.    found. It may also be a separate command when an existing stream has
  5460.    been preempted by a higher precedence stream or an ST agent detects
  5461.    the failure of a previous-hop, next-hop, or the network between them.
  5462.    In all cases, the TargetList specifies the targets that are affected
  5463.    by the condition. Each REFUSE must be acknowledged by an ACK.
  5464.  
  5465.    The REFUSE is relayed back by the ST agents to the origin (or
  5466.    intermediate ST agent that created the CONNECT or CHANGE) along the
  5467.    path traced by the CONNECT. The ST agent receiving the REFUSE will
  5468.    process it differently depending on the condition that caused it, as
  5469.    specified in the ReasonCode field. No special effort is made to
  5470.    combine multiple REFUSE messages since it is considered most unlikely
  5471.    that separate REFUSEs will happen to both pass through an ST agent at
  5472.    the same time and be easily combined, e.g., have identical
  5473.    ReasonCodes and parameters.
  5474.  
  5475.  
  5476.  
  5477.  
  5478.  
  5479.  
  5480.  
  5481.  
  5482.  
  5483.  
  5484.  
  5485.  
  5486.  
  5487.  
  5488.  
  5489.  
  5490. Delgrossi & Berger, Editors   Experimental                     [Page 98]
  5491.  
  5492. RFC 1819              ST2+ Protocol Specification            August 1995
  5493.  
  5494.  
  5495.         0                   1                   2                   3
  5496.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5497.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5498.        |  OpCode = 11  |G|E|N|    0    |           TotalBytes          |
  5499.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5500.        |      Reference                |         LnkReference          |
  5501.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5502.        |                         SenderIPAddress                       |
  5503.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5504.        |            Checksum           |          ReasonCode           |
  5505.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5506.        |                       DetectorIPAddress                       |
  5507.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5508.        |                       ValidTargetIPAddress                    |
  5509.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5510.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5511.        :                          TargetList                           :
  5512.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5513.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5514.        :                         RecordRoute                           :
  5515.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5516.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5517.        :                            UserData                           :
  5518.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5519.  
  5520.                      Figure 31: REFUSE Control Message
  5521.  
  5522. o   G (bit 8) is used to indicate that all targets down stream from the
  5523.     sender are refusing. It is expected that this will be set most
  5524.     commonly due to network failures. The TargetList parameter is
  5525.     ignored or not present when this bit is set, and must be included
  5526.     when not set.
  5527.  
  5528. o   E (bit 9) is set by an ST agent to indicate that the request failed
  5529.     and that the pre-change stream attributes, including resources, and
  5530.     the stream itself still exist.
  5531.  
  5532. o   N (bit 10) is used to indicate that no further attempts to recover
  5533.     the stream should be made. This bit must be set when stream recovery
  5534.     should not be attempted, even in the case where the target
  5535.     application has shut down normally (ApplDisconnect).
  5536.  
  5537. o   Reference contains a number assigned by the ST agent sending the
  5538.     REFUSE for use in the acknowledging ACK.
  5539.  
  5540. o   LnkReference is either the Reference number from the corresponding
  5541.     CONNECT or CHANGE, if it is the result of such a message, or zero
  5542.     when the REFUSE was originated as a separate command.
  5543.  
  5544.  
  5545.  
  5546. Delgrossi & Berger, Editors   Experimental                     [Page 99]
  5547.  
  5548. RFC 1819              ST2+ Protocol Specification            August 1995
  5549.  
  5550.  
  5551. o   DetectorIPAddress is the 32-bit IP address of the host that first
  5552.     generated the REFUSE message.
  5553.  
  5554. o   ValidTargetIPAddress is the 32-bit IP address of a host that is
  5555.     properly connected as part of the stream. This parameter is only
  5556.     used when recovering from stream convergence, otherwise it is set to
  5557.     zero (0).
  5558.  
  5559. 10.4.12  STATUS
  5560.  
  5561.    STATUS (OpCode = 12) is used to inquire about the existence of a
  5562.    particular stream identified by the SID. Use of STATUS is intended
  5563.    for collecting information from an neighbor ST agent, including
  5564.    general and specific stream information, and round trip time
  5565.    estimation. The use of this message type is described in Section 8.4.
  5566.  
  5567.         0                   1                   2                   3
  5568.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5569.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5570.        | OpCode = 12   |       0       |           TotalBytes          |
  5571.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5572.        |      Reference                |       LnkReference = 0        |
  5573.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5574.        |                         SenderIPAddress                       |
  5575.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5576.        |            Checksum           |          ReasonCode = 0       |
  5577.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5578.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5579.        :                          TargetList                           :
  5580.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5581.  
  5582.                      Figure 32: STATUS Control Message
  5583.  
  5584. o   Reference contains a number assigned by the ST agent sending STATUS
  5585.     for use in the replying STATUS-RESPONSE.
  5586.  
  5587. o   TargetList is an optional parameter that when present indicates that
  5588.     only information related to the specific targets should be relayed
  5589.     in the STATUS-RESPONSE.
  5590.  
  5591. 10.4.13  STATUS-RESPONSE
  5592.  
  5593.    STATUS-RESPONSE (OpCode = 13) is the reply to a STATUS message. If
  5594.    the stream specified in the STATUS message is not known, the STATUS-
  5595.    RESPONSE will contain the specified SID but no other parameters. It
  5596.    will otherwise contain the current SID, FlowSpec, TargetList, and
  5597.    possibly Groups of the stream. It the full target list can not fit in
  5598.    a single message, only those targets that can be included in one
  5599.  
  5600.  
  5601.  
  5602. Delgrossi & Berger, Editors   Experimental                    [Page 100]
  5603.  
  5604. RFC 1819              ST2+ Protocol Specification            August 1995
  5605.  
  5606.  
  5607.    message will be included. As mentioned in Section 10.4.12, it is
  5608.    possible to request information on a specific target.
  5609.  
  5610.         0                   1                   2                   3
  5611.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5612.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5613.        |  OpCode = 13  |    0          |           TotalBytes          |
  5614.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5615.        |      Reference                |       LnkReference = 0        |
  5616.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5617.        |                         SenderIPAddress                       |
  5618.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5619.        |            Checksum           |       ReasonCode = 0          |
  5620.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5621.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5622.        :                           FlowSpec                            :
  5623.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5624.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5625.        :                           Groups                              :
  5626.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5627.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5628.        :                          TargetList                           :
  5629.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5630.  
  5631.                  Figure 33: STATUS-RESPONSE Control Message
  5632.  
  5633. o   Reference contains a number assigned by the ST agent sending the
  5634.     STATUS.
  5635.  
  5636. 10.5  Suggested Protocol Constants
  5637.  
  5638.    The ST Protocol uses several fields that must have specific values
  5639.    for the protocol to work, and also several values that an
  5640.    implementation must select. This section specifies the required
  5641.    values and suggests initial values for others. It is recommended that
  5642.    the latter be implemented as variables so that they may be easily
  5643.    changed when experience indicates better values. Eventually, they
  5644.    should be managed via the normal network management facilities.
  5645.  
  5646.    ST uses IP Version Number 5.
  5647.  
  5648.    When encapsulated in IP, ST uses IP Protocol Number 5.
  5649.  
  5650.  
  5651.  
  5652.  
  5653.  
  5654.  
  5655.  
  5656.  
  5657.  
  5658. Delgrossi & Berger, Editors   Experimental                    [Page 101]
  5659.  
  5660. RFC 1819              ST2+ Protocol Specification            August 1995
  5661.  
  5662.  
  5663. 10.5.1  SCMP Messages
  5664.  
  5665.    1)      ACCEPT
  5666.    2)      ACK
  5667.    3)      CHANGE
  5668.    4)      CONNECT
  5669.    5)      DISCONNECT
  5670.    6)      ERROR
  5671.    7)      HELLO
  5672.    8)      JOIN
  5673.    9)      JOIN-REJECT
  5674.    10)     NOTIFY
  5675.    11)     REFUSE
  5676.    12)     STATUS
  5677.    13)     STATUS-RESPONSE
  5678.  
  5679. 10.5.2  SCMP Parameters
  5680.  
  5681.    1)      FlowSpec
  5682.    2)      Group
  5683.    3)      MulticastAddress
  5684.    4)      Origin
  5685.    5)      RecordRoute
  5686.    6)      TargetList
  5687.    7)      UserData
  5688.  
  5689. 10.5.3  ReasonCode
  5690.  
  5691.    Several errors may occur during protocol processing. All ST error
  5692.    codes are taken from a single number space. The currently defined
  5693.    values and their meaning is presented in the list below. Note that
  5694.    new error codes may be defined from time to time. All implementations
  5695.    are expected to handle new codes in a graceful manner. If an unknown
  5696.    ReasonCode is encountered, it should be assumed to be fatal. The
  5697.    ReasonCode is an 8-bit field. Following values are defined:
  5698.  
  5699. 1       NoError         No error has occurred.
  5700. 2       ErrorUnknown    An error not contained in this list has been
  5701.                         detected.
  5702. 3       AccessDenied    Access denied.
  5703. 4       AckUnexpected   An unexpected ACK was received.
  5704. 5       ApplAbort       The application aborted the stream abnormally.
  5705. 6       ApplDisconnect  The application closed the stream normally.
  5706. 7       ApplRefused     Applications refused requested connection or
  5707.                         change.
  5708. 8       AuthentFailed   The authentication function failed.
  5709. 9       BadMcastAddress IP Multicast address is unacceptable in CONNECT
  5710. 10      CantGetResrc    Unable to acquire (additional) resources.
  5711.  
  5712.  
  5713.  
  5714. Delgrossi & Berger, Editors   Experimental                    [Page 102]
  5715.  
  5716. RFC 1819              ST2+ Protocol Specification            August 1995
  5717.  
  5718.  
  5719. 11      CantRelResrc    Unable to release excess resources.
  5720. 12      CantRecover     Unable to recover failed stream.
  5721. 13      CksumBadCtl     Control PDU has a bad message checksum.
  5722. 14      CksumBadST      PDU has a bad ST Header checksum.
  5723. 15      DuplicateIgn    Control PDU is a duplicate and is being
  5724.                         acknowledged.
  5725. 16      DuplicateTarget Control PDU contains a duplicate target, or an
  5726.                         attempt to add an existing target.
  5727. 17      FlowSpecMismatch        FlowSpec in request does not match
  5728.                                 existing FlowSpec.
  5729. 18      FlowSpecError   An error occurred while processing the FlowSpec
  5730. 19      FlowVerUnknown  Control PDU has a FlowSpec Version Number that
  5731.                         is not supported.
  5732. 20      GroupUnknown    Control PDU contains an unknown Group Name.
  5733. 21      InconsistGroup  An inconsistency has been detected with the
  5734.                         streams forming a group.
  5735. 22      IntfcFailure    A network interface failure has been detected.
  5736. 23      InvalidSender   Control PDU has an invalid SenderIPAddress
  5737.                         field.
  5738. 24      InvalidTotByt   Control PDU has an invalid TotalBytes field.
  5739. 25      JoinAuthFailure Join failed due to stream authorization level.
  5740. 26      LnkRefUnknown   Control PDU contains an unknown LnkReference.
  5741. 27      NetworkFailure  A network failure has been detected.
  5742. 28      NoRouteToAgent  Cannot find a route to an ST agent.
  5743. 29      NoRouteToHost   Cannot find a route to a host.
  5744. 30      NoRouteToNet    Cannot find a route to a network.
  5745. 31      OpCodeUnknown   Control PDU has an invalid OpCode field.
  5746. 32      PCodeUnknown    Control PDU has a parameter with an invalid
  5747.                         PCode.
  5748. 33      ParmValueBad    Control PDU contains an invalid parameter value.
  5749. 34      PathConvergence Two branches of the stream join during the
  5750.                         CONNECT setup.
  5751. 35      ProtocolUnknown Control PDU contains an unknown next-higher
  5752.                         layer protocol identifier.
  5753. 36      RecordRouteSize RecordRoute parameter is too long to permit
  5754.                         message to fit a network's MTU.
  5755. 37      RefUnknown      Control PDU contains an unknown Reference.
  5756. 38      ResponseTimeout Control message has been acknowledged but not
  5757.                         answered by an appropriate control message.
  5758. 39      RestartLocal    The local ST agent has recently restarted.
  5759. 40      RestartRemote   The remote ST agent has recently restarted.
  5760. 41      RetransTimeout  An acknowledgment has not been received after
  5761.                         several retransmissions.
  5762. 42      RouteBack       Route to next-hop through same interface as
  5763.                         previous-hop and is not previous-hop.
  5764. 43      RouteInconsist  A routing inconsistency has been detected.
  5765. 44      RouteLoop       A routing loop has been detected.
  5766.  
  5767.  
  5768.  
  5769.  
  5770. Delgrossi & Berger, Editors   Experimental                    [Page 103]
  5771.  
  5772. RFC 1819              ST2+ Protocol Specification            August 1995
  5773.  
  5774.  
  5775. 45      SAPUnknown      Control PDU contains an unknown next-higher
  5776.                         layer SAP (port).
  5777. 46      SIDUnknown      Control PDU contains an unknown SID.
  5778. 47      STAgentFailure  An ST agent failure has been detected.
  5779. 48      STVer3Bad       A received PDU is not ST Version 3.
  5780. 49      StreamExists    A stream with the given SID already exists.
  5781. 50      StreamPreempted The stream has been preempted by one with a
  5782.                         higher precedence.
  5783. 51      TargetExists    A CONNECT was received that specified an
  5784.                         existing target.
  5785. 52      TargetUnknown   A target is not a member of the specified
  5786.                         stream.
  5787. 53      TargetMissing   A target parameter was expected and is not
  5788.                         included, or is empty.
  5789. 54      TruncatedCtl    Control PDU is shorter than expected.
  5790. 55      TruncatedPDU    A received ST PDU is shorter than the ST Header
  5791.                         indicates.
  5792. 56      UserDataSize    UserData parameter too large to permit a
  5793.                         message to fit into a network's MTU.
  5794.  
  5795. 10.5.4  Timeouts and Other Constants
  5796.  
  5797.    SCMP uses retransmission to effect reliability and thus has several
  5798.    "retransmission timers". Each "timer" is modeled by an initial time
  5799.    interval (ToXxx), which may get updated dynamically through
  5800.    measurement of control traffic, and a number of times (NXxx) to
  5801.    retransmit a message before declaring a failure. All time intervals
  5802.    are in units of milliseconds. Note that the variables are described
  5803.    for reference purposes only, different implementations may not
  5804.    include the identical variables.
  5805.  
  5806. Value   Timeout Name    Meaning
  5807. ------------------------------------------------------------------------
  5808.   500   ToAccept        Initial hop-by-hop timeout for acknowledgment of
  5809.                         ACCEPT
  5810.     3   NAccept         ACCEPT retries before failure
  5811.   500   ToChange        Initial hop-by-hop timeout for acknowledgment of
  5812.                         CHANGE
  5813.     3   NChange         CHANGE retries before failure
  5814.  5000   ToChangeResp    End-to-End CHANGE timeout for receipt of ACCEPT
  5815.                         or REFUSE
  5816.   500   ToConnect       Initial hop-by-hop timeout for acknowledgment of
  5817.                         CONNECT
  5818.     5   NConnect        CONNECT retries before failure
  5819.  5000   ToConnectResp   End-to-End CONNECT timeout for receipt of ACCEPT
  5820.                         or REFUSE from targets by origin
  5821.   500   ToDisconnect    Initial hop-by-hop timeout for acknowledgment of
  5822.                         DISCONNECT
  5823.  
  5824.  
  5825.  
  5826. Delgrossi & Berger, Editors   Experimental                    [Page 104]
  5827.  
  5828. RFC 1819              ST2+ Protocol Specification            August 1995
  5829.  
  5830.  
  5831.     3   NDisconnect     DISCONNECT retries before failure
  5832.   500   ToJoin          Initial hop-by-hop timeout for acknowledgment of
  5833.                         JOIN
  5834.     3   NJoin           JOIN retries before failure
  5835.   500   ToJoinReject    Initial hop-by-hop timeout for acknowledgment of
  5836.                         JOIN-REJECT
  5837.     3   NJoinReject     JOIN-REJECT retries before failure
  5838.  5000   ToJoinResp      Timeout for receipt of CONNECT or JOIN-REJECT
  5839.                         from origin or intermediate hop
  5840.   500   ToNotify        Initial hop-by-hop timeout for acknowledgment of
  5841.                         NOTIFY
  5842.     3   NNotify         NOTIFY retries before failure
  5843.   500   ToRefuse        Initial hop-by-hop timeout for acknowledgment of
  5844.                         REFUSE
  5845.     3   NRefuse         REFUSE retries before failure
  5846.   500   ToRetryRoute    Timeout for receipt of ACCEPT or REFUSE from
  5847.                         targets during failure recovery
  5848.     5   NRetryRoute     CONNECT retries before failure
  5849.  1000   ToStatusResp    Timeout for receipt of STATUS-RESPONSE
  5850.     3   NStatus         STATUS retries before failure
  5851. 10000   HelloTimerHoldDown      Interval that Restarted bit must be set
  5852.                                 after ST restart
  5853.     5   HelloLossFactor         Number of consecutively missed HELLO
  5854.                                 messages before declaring link failure
  5855.  2000   DefaultRecoveryTimeout  Interval between successive HELLOs
  5856.                                 to/from active neighbors
  5857.  
  5858. 10.6  Data Notations
  5859.  
  5860.    The convention in the documentation of Internet Protocols is to
  5861.    express numbers in decimal and to picture data with the most
  5862.    significant octet on the left and the least significant octet on the
  5863.    right.
  5864.  
  5865.    The order of transmission of the header and data described in this
  5866.    document is resolved to the octet level. Whenever a diagram shows a
  5867.    group of octets, the order of transmission of those octets is the
  5868.    normal order in which they are read in English. For example, in the
  5869.    following diagram the octets are transmitted in the order they are
  5870.    numbered.
  5871.  
  5872.  
  5873.  
  5874.  
  5875.  
  5876.  
  5877.  
  5878.  
  5879.  
  5880.  
  5881.  
  5882. Delgrossi & Berger, Editors   Experimental                    [Page 105]
  5883.  
  5884. RFC 1819              ST2+ Protocol Specification            August 1995
  5885.  
  5886.  
  5887.         0                   1                   2                   3
  5888.         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5889.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5890.        |       1       |       2       |       3       |       4       |
  5891.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5892.        |       5       |       6       |       7       |       8       |
  5893.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5894.        |       9       |      10       |      11       |      12       |
  5895.        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5896.  
  5897.                   Figure 34:  Transmission Order of Bytes
  5898.  
  5899.    Whenever an octet represents a numeric quantity the left most bit in
  5900.    the diagram is the high order or most significant bit. That is, the
  5901.    bit labeled 0 is the most significant bit. For example, the following
  5902.    diagram represents the value 170 (decimal).
  5903.  
  5904.                                 0 1 2 3 4 5 6 7
  5905.                                +-+-+-+-+-+-+-+-+
  5906.                                |1 0 1 0 1 0 1 0|
  5907.                                +-+-+-+-+-+-+-+-+
  5908.  
  5909.                       Figure 35: Significance of Bits
  5910.  
  5911.    Similarly, whenever a multi-octet field represents a numeric quantity
  5912.    the left most bit of the whole field is the most significant bit.
  5913.    When a multi-octet quantity is transmitted the most significant octet
  5914.    is transmitted first.
  5915.  
  5916.    Fields whose length is fixed and fully illustrated are shown with a
  5917.    vertical bar (|) at the end; fixed fields whose contents are
  5918.    abbreviated are shown with an exclamation point (!); variable fields
  5919.    are shown with colons (:). Optional parameters are separated from
  5920.    control messages with a blank line. The order of parameters is not
  5921.    meaningful.
  5922.  
  5923. 11.  References
  5924.  
  5925. [RFC1071]       Braden, R., Borman, D., and C. Partridge,
  5926.                 "Computing the Internet Checksum", RFC 1071,
  5927.                 USC/Information Sciences Institute,
  5928.                 Cray Research, BBN Laboratories, September 1988.
  5929.  
  5930. [RFC1112]       Deering, S., "Host Extensions for IP Multicasting",
  5931.                 STD 5, RFC 1112, Stanford University, August 1989.
  5932.  
  5933.  
  5934.  
  5935.  
  5936.  
  5937.  
  5938. Delgrossi & Berger, Editors   Experimental                    [Page 106]
  5939.  
  5940. RFC 1819              ST2+ Protocol Specification            August 1995
  5941.  
  5942.  
  5943. [WoHD95]        L. Wolf, R. G. Herrtwich, L. Delgrossi: Filtering
  5944.                 Multimedia Data in Reservation-based Networks,
  5945.                 Kommunikation in Verteilten Systemen 1995 (KiVS),
  5946.                 Chemnitz-Zwickau, Germany, February 1995.
  5947.  
  5948. [RFC1122]       Braden, R., "Requirements for Internet Hosts --
  5949.                 Communication Layers", STD 3, RFC 1122,
  5950.                 USC/Information Sciences Institute, October 1989.
  5951.  
  5952. [Jaco88]        Jacobson, V.: Congestion Avoidance and Control, ACM
  5953.                 SIGCOMM-88, August 1988.
  5954.  
  5955. [KaPa87]        Karn, P. and C. Partridge: Round Trip Time Estimation,
  5956.                 ACM SIGCOMM-87, August 1987.
  5957.  
  5958. [RFC1141]       Mallory, T., and A. Kullberg, "Incremental Updating
  5959.                 of the Internet Checksum", RFC 1141, BBN, January 1990.
  5960.  
  5961. [RFC1363]       Partridge, C., "A Proposal Flow Specification",
  5962.                 RFC 1363, BBN, September 1992.
  5963.  
  5964. [RFC791]        Postel, J., "Internet Protocol", STD 5, RFC 791,
  5965.                 DARPA, September 1981.
  5966.  
  5967. [RFC1700]       Reynolds, J., and J. Postel, "Assigned Numbers",
  5968.                 STD 2, RFC 1700, USC/Information Sciences Institute,
  5969.                 October 1994.
  5970.  
  5971. [RFC1190]       Topolcic C., "Internet Stream Protocol Version 2
  5972.                 (ST-II)", RFC 1190, CIP Working Group, October 1990.
  5973.  
  5974. [RFC1633]       Braden, R., Clark, D., and S. Shenker, "Integrated
  5975.                 Services in the Internet Architecture: an Overview",
  5976.                 RFC 1633, USC/Information Sciences Institute,
  5977.                 MIT, Xerox PARC, June 1994.
  5978.  
  5979. [VoHN93]        C. Vogt, R. G. Herrtwich, R. Nagarajan: HeiRAT: the
  5980.                 Heidelberg Resource Administration Technique - Design
  5981.                 Philosophy and Goals, Kommunikation In Verteilten
  5982.                 Systemen, Munich, Informatik Aktuell, Springer-Verlag,
  5983.                 Heidelberg, 1993.
  5984.  
  5985. [Cohe81]        D. Cohen: A Network Voice Protocol NVP-II, University of
  5986.                 Southern California, Los Angeles, 1981.
  5987.  
  5988. [Cole81]        R. Cole: PVP - A Packet Video Protocol, University of
  5989.                 Southern California, Los Angeles, 1981.
  5990.  
  5991.  
  5992.  
  5993.  
  5994. Delgrossi & Berger, Editors   Experimental                    [Page 107]
  5995.  
  5996. RFC 1819              ST2+ Protocol Specification            August 1995
  5997.  
  5998.  
  5999. [DeAl92]        L. Delgrossi (Ed.) The BERKOM-II Multimedia Transport
  6000.                 System, Version 1, BERKOM Working Document, October,
  6001.                 1992.
  6002.  
  6003. [DHHS92]        L. Delgrossi, C. Halstrick, R. G. Herrtwich, H.
  6004.                 Stuettgen: HeiTP: a Transport Protocol for ST-II,
  6005.                 GLOBECOM'92, Orlando (Florida), December 1992.
  6006.  
  6007. [Schu94]        H. Schulzrinne: RTP: A Transport Protocol for Real-Time
  6008.                 Applications. Work in Progress, 1994.
  6009.  
  6010.  
  6011. 12.  Security Considerations
  6012.  
  6013.    Security issues are not discussed in this memo.
  6014.  
  6015. 13.  Acknowledgments and Authors' Addresses
  6016.  
  6017.    Many individuals have contributed to the work described in this memo.
  6018.    We thank the participants in the ST Working Group for their input,
  6019.    review, and constructive comments. George Mason University C3I Center
  6020.    for hosting an interim meeting. Murali Rajagopal for his efforts on
  6021.    ST2+ state machines. Special thanks are due to Steve DeJarnett, who
  6022.    served as working group co-chair until summer 1993.
  6023.  
  6024.    We would also like to acknowledge the authors of [RFC1190]. All
  6025.    authors of [RFC1190] should be considered authors of this document
  6026.    since this document contains much of their text and ideas.
  6027.  
  6028.  
  6029.  
  6030.  
  6031.  
  6032.  
  6033.  
  6034.  
  6035.  
  6036.  
  6037.  
  6038.  
  6039.  
  6040.  
  6041.  
  6042.  
  6043.  
  6044.  
  6045.  
  6046.  
  6047.  
  6048.  
  6049.  
  6050. Delgrossi & Berger, Editors   Experimental                    [Page 108]
  6051.  
  6052. RFC 1819              ST2+ Protocol Specification            August 1995
  6053.  
  6054.  
  6055.    Louis Berger
  6056.    BBN Systems and Technologies
  6057.    1300 North 17th Street, Suite 1200
  6058.    Arlington, VA 22209
  6059.  
  6060.    Phone: 703-284-4651
  6061.    EMail: lberger@bbn.com
  6062.  
  6063.  
  6064.    Luca Delgrossi
  6065.    Andersen Consulting Technology Park
  6066.    449, Route des Cretes
  6067.    06902 Sophia Antipolis, France
  6068.  
  6069.    Phone: +33.92.94.80.92
  6070.    EMail: luca@andersen.fr
  6071.  
  6072.  
  6073.    Dat Duong
  6074.    BBN Systems and Technologies
  6075.    1300 North 17th Street, Suite 1200
  6076.    Arlington, VA 22209
  6077.  
  6078.    Phone: 703-284-4760
  6079.    EMail: dat@bbn.com
  6080.  
  6081.  
  6082.    Steve Jackowski
  6083.    Syzygy Communications Incorporated
  6084.    269 Mt. Hermon Road
  6085.    Scotts Valley, CA 95066
  6086.  
  6087.    Phone: 408-439-6834
  6088.    EMail: stevej@syzygycomm.com
  6089.  
  6090.  
  6091.    Sibylle Schaller
  6092.    IBM ENC
  6093.    Broadband Multimedia Communications
  6094.    Vangerowstr. 18
  6095.    D69020 Heidelberg, Germany
  6096.  
  6097.    Phone: +49-6221-5944553
  6098.    EMail: schaller@heidelbg.ibm.com
  6099.  
  6100.  
  6101.  
  6102.  
  6103.  
  6104.  
  6105.  
  6106. Delgrossi & Berger, Editors   Experimental                    [Page 109]
  6107.  
  6108.